Page 1 sur 1

pbe de tableau et textes dans une DLL...

Publié : jeu. 17/juin/2004 14:28
par freddix
Bon...

toujours des petits soucis avec ma DLL ...

J'ai une structure et son tableau :

Code : Tout sélectionner

Structure Entity_Type
  Name.s : Object.s : Image.s : Script.s
  Transparence.l : Scaling.f : HideBlack.l : NoLights.l : LightNing.l : CastShadow.l : AutoY.l : AdjustY.l
  Type.l : Format.l : Id.l : PhysicID.l : Active.l : MinLevel.l : Slot.l : Duration.l : Use.l : Cumulate.l
  Bonus1.l : Value1.l : Bonus2.l : Value2.l : Bonus3.l : Value3.l : Bonus4.l : Value4.l
  Force.l : Constitution.l : Intelligence.l : Vivacite.l : Dexterite.l : Charisme.l : Money.l
 EndStructure
Dim MEntity.Entity_Type( 256 ) 
Je définit une de ses composantes par une fonction de ma DLL ... et je l'affiche pour bien vérifier qu'elle ait été modifiée !
par exemple :

Code : Tout sélectionner

ProcedureCDLL SetName()
  MEntity( 1 )\Name = "Test"
  Temp$ = MEntity( 1 )\Name
  MessageRequester("Temporar Data NAME", Temp$ ) 
 EndProcedure
Jusque la, tout va bien, mon Requester me dit "Test" . Parfait
Maintenant, je crée une autre fonction dans ma DLL pour lire cette donnée.

Code : Tout sélectionner

ProcedureCDLL ShowName()
  Temp$ = MEntity( 1 )\Name
  MessageRequester("Temporar Data NAME", Temp$ ) 
 EndProcedure
Et bien la, surprise, il n'affiche plus rien !
pour lui c vide ...
Ce problème est peut-être consécutif à l'autre problème que j'ai avec ma DLL ( voir section bugs ) ... je ne sais pas . . .

Publié : jeu. 17/juin/2004 15:24
par Crystal Noir
euh je sais pas du tout comment tu as agencé ca , mais dans ton premier bout de code, bien sur que ca marche, car tu viens juste d'entrer ta variable name.

Code : Tout sélectionner

MEntity( 1 )\Name = "Test"
Par contre quand tu appelles ton second code, est ce que auparavant tu n'aurais pas oublié de faire un set de ta variable Name ? (le truc tout con quoi). C'est à dire que tu vires ton requester de ta procédure Setname.

Puis tu appelles Setname et juste après Showname. et voit si ca marche.

Fais ce test par ex :

Code : Tout sélectionner

déclaration procedure
ProcedureCDLL SetName(nom.s,casetab.w) 
  MEntity( casetab )\Name = nom
EndProcedure

ProcedureCDLL ShowName(casetab.w) 
  Temp$ = MEntity( casetab )\Name 
  MessageRequester("Temporar Data NAME", Temp$ ) 
 EndProcedure 
et après dans ta boucle principale :

Code : Tout sélectionner

Setname("Test",1)
Showname(1)

Publié : jeu. 17/juin/2004 16:06
par Anonyme2
Ton code me semble correct.

Soit comme tu dis un prob dans la Dll, soit ton appel se fait avant de mettre une valeur dans le tableau (je ne pense pas que tu ai oublié de le remplir avant).

Essaye de retourner l'adresse du premier élément du tableau lorsque tu met une valeur et lorsque tu la lis. On doit avoir les mêmes valeurs.