utiliser l'adresse d'une structure

Programmation d'applications complexes
meganet
Messages : 317
Inscription : jeu. 20/janv./2005 22:00

utiliser l'adresse d'une structure

Message par meganet »

Salut, pour ma lib http, on passe l'adresse d'une structure à une fonction.
La structure contien tous les paramètre pour utiliser http.
Mais quant je compile, il me dit qu'il y à une erreur.
J'ai utilisé cette sintax.

ProcedureDLL.L HTTP_Connect(Structure_ADDR)
HTTP_Type = Structure_ADDR\HTTP_Type
EndProcedure
Et il me sort une erreur à: HTTP_Type = Structure_ADDR\HTTP_Type.
Quelqu'un aurait un code pour pouvoir utiliser l'adresse de la structure?
Merci.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

essaye deja en retirant ce ".L"
:)

ou alors met ".l" ( L minuscule)
Anonyme

Message par Anonyme »

Code : Tout sélectionner

ProcedureDLL.L HTTP_Connect(*Structure_ADDR.TaStructure)
HTTP_Type = *Structure_ADDR\HTTP_Type
EndProcedure 
Exemple :

Code : Tout sélectionner

Structure AZERTY
CODE.L
endstructure

ProcedureDLL.L MyFunc(*Var.AZERTY)
Type = *Var\CODE
procedurereturn Type
endprocedure

@++
meganet
Messages : 317
Inscription : jeu. 20/janv./2005 22:00

Et si je modifie?

Message par meganet »

Salut, et si je modifie un champs dans la structure il cera modifier que dans la structure de ma dll, ou les modifications cerons aussi sur la structure qui à été passé en paramètre?
Merci!
Anonyme

Message par Anonyme »

Voilà un exemple plus parlant , ici c'est l'addition de 2 vecteurs, peut importe que tu saches ce que c'est , disont c'est la representation d'un point dans un espace 3D en XYZ pour faire simple.
Ma fonction ADD_VECTOR3() additionne 2 vecteurs le vecteur A au vecteur B, 2 paramètres sont donc nécéssaire au bon fonctionnement de la procedure.

Code : Tout sélectionner

ADD_VECTOR3(*VectorA.VECTOR3,*VectorB.VECTOR3)
j'ai choisi de mettre le resultat dans VectorA (rf:procedure)
j'aurais pu mettre les 2 ou ajouté un 3° paramètres afin de lui donner le resultat.

Code : Tout sélectionner

Structure VECTOR3
X.f
Y.f
Z.f
EndStructure

ProcedureDLL.L ADD_VECTOR3(*VectorA.VECTOR3,*VectorB.VECTOR3)

 *VectorA\X = *VectorA\X + *VectorB\X
 *VectorA\Y = *VectorA\Y + *VectorB\Y
 *VectorA\Z = *VectorA\Z + *VectorB\Z
             
EndProcedure




MaPosition_A.VECTOR3
 MaPosition_A\X = 150
  MaPosition_A\Y = 255
   MaPosition_A\Z = 384

MaPosition_B.VECTOR3
 MaPosition_B\X = 550
  MaPosition_B\Y = 755
   MaPosition_B\Z = 34
   
   Debug "VECTOR A ORIGINAL"
   Debug "--------"
   Debug "X="+Str(MaPosition_A\X)
   Debug "Y="+Str(MaPosition_A\Y)
   Debug "Z="+Str(MaPosition_A\Z)
   Debug "--------"
   Debug "VECTOR B ORIGINAL"
   Debug "--------"
   Debug "X="+Str(MaPosition_B\X)
   Debug "Y="+Str(MaPosition_B\Y)
   Debug "Z="+Str(MaPosition_B\Z)
   Debug "--------"
   
   Debug ""
   Debug ""
   Debug ""
   Debug "ADD VECTOR B TO VECTOR A()"
   Debug ""
   Debug ""
   Debug ""
   ADD_VECTOR3(MaPosition_A,MaPosition_B)
   
   
   Debug "VECTOR A"
   Debug "--------"
   Debug "X="+Str(MaPosition_A\X)
   Debug "Y="+Str(MaPosition_A\Y)
   Debug "Z="+Str(MaPosition_A\Z)
   Debug "--------"
   Debug "VECTOR B"
   Debug "--------"
   Debug "X="+Str(MaPosition_B\X)
   Debug "Y="+Str(MaPosition_B\Y)
   Debug "Z="+Str(MaPosition_B\Z)
   Debug "--------"
meganet
Messages : 317
Inscription : jeu. 20/janv./2005 22:00

Marche pas dans une library

Message par meganet »

Salut, déjà merci pour l'aide!
Mais c'est code ne marche pas dans une library. Quant je compile, il me dit structure no found (pour la structure passé en paramètre).
Ce que je veu faire, ces que via le programme qui appelle ma library, on puisse récuperrer dans une structure toutes les info (entête, taille du fichier etc...) (je parle pour ma lib http).
Donc je pence qu'il faudrai déclarer une structure dans le programme client, et récupairer son adresse dans la library pour pouvoir remplir les champs entête etc...
Merci!
Anonyme

Message par Anonyme »

la structure si tu la déclare ds ta lib , il n'y a pas besoin de la redéclarer
Fait une fct° du style :

Code : Tout sélectionner

proceduredll init()
structure A
B.l
endstructure

endprocedure
@++
meganet
Messages : 317
Inscription : jeu. 20/janv./2005 22:00

Library = dll par exemple

Message par meganet »

Quant je dit library, c'est par example une dll. Et si c'est bien ça que tu à compris, comme je fait après avec le programme qui utiliser cette dll avec openlibrary etc... pour récupairer les info mis dans la structure?
Merci!
Anonyme

Message par Anonyme »

Quant je dit library, c'est par example une dll. Et si c'est bien ça que tu à compris, comme je fait après avec le programme qui utiliser cette dll avec openlibrary etc... pour récupairer les info mis dans la structure?
Merci!
Excuse moi, mais j'ai rien compris.

si ta structure est déjà declarer ds ta dll, ta pas besoin de la redéclarer dans ton programme qui utilise ta structure, que se soit une dll une lib un pbi...

@++
meganet
Messages : 317
Inscription : jeu. 20/janv./2005 22:00

Ok mais

Message par meganet »

Ok, mais comment je fait pour utiliser la structure dans lr programme qui utilise ma dll?
Anonyme

Message par Anonyme »

comme j'ai dit plus haut

Code : Tout sélectionner

proceduredll init() 
structure A 
B.l 
endstructure 

endprocedure 
si cela ne fonctionne pas , fait un wrapp de ta dll dans un pbi
et dedans tu redeclares tes structures, et tu importes tes fct° avec import/endimport

@++
meganet
Messages : 317
Inscription : jeu. 20/janv./2005 22:00

Ok Merci!

Message par meganet »

Ok, jvai essayer tout ça. Merci beaucoup!
Répondre