Page 1 sur 1

DLL : passer une variable en paramètre

Publié : lun. 12/mai/2014 11:10
par blendman
Salut

Dans un de mes programmes, j'essaie d'utiliser une dll pour l'export.

Voici mon code pour la dll :

Code : Tout sélectionner

Structure document
w.i
h.i
name$
info$
EndStructure

ProcedureDLL PGC_Export(*doc.document)
 text$ = *doc\name$ +Str(*doc\W)+Str(*doc\H)+*doc\Info$  
MessageRequester("info",text$)
  
EndProcedure
Et le code avec lequel j'appelle cette dll dans mon programme :

Code : Tout sélectionner

Structure document
w.i
h.i
name$
info$
EndStructure
Global doc.document

Procedure Plugin_Export()
    
  If OpenLibrary(0, "plugins\export.dll") 
    CallFunction(0, "Export", @doc)  
  EndIf

EndProcedure
JE ne sais pas trop ce que je dois modifier pour que ça fonctionne.

Re: DLL : passer une variable en paramètre

Publié : lun. 12/mai/2014 11:54
par falsam
Ton call appelle une procédure qui n'existe pas.

Voila comment ça fonctionne chez moi.

■ la dll

Code : Tout sélectionner

Structure document
  w.i
  h.i
  name$
  info$
EndStructure

ProcedureDLL PGC_Export(*doc.document)
  text$ = *doc\name$ +Str(*doc\W) + Str(*doc\H) + *doc\Info$  
  MessageRequester("info",text$)
EndProcedure
■ L'appel

Code : Tout sélectionner

Structure document
  w.i
  h.i
  name$
  info$
EndStructure

Global doc.document

doc\name$ = "test"

Procedure Plugin_Export()
   
  If OpenLibrary(0, "export.dll") 
    CallFunction(0, "PGC_Export", @doc.document)  
  EndIf
 
EndProcedure

Plugin_Export()

Re: DLL : passer une variable en paramètre

Publié : lun. 12/mai/2014 12:02
par Backup
oui, on avait deja parlé de ça, il faut que la Structure existe dans la DLL ET dans le Prg appelant :)

autre solution ,sans Structure , renvoyer l'adresse de la variable Chaine

et dans le prg appelant, on récupère avec un PeekS()

utile si on ne renvoi qu'une seule variable ....

Re: DLL : passer une variable en paramètre

Publié : lun. 12/mai/2014 12:10
par blendman
ah oui, tu as raison, j'avais mal recopié mon code, mais dans mon programme, le code était ok (le nom de la fonction appelée était ok).

Ce qui est surprenant, c'est qu'effectivement, le code simple fonctionne, mais dans mon programme, alors que c'est exactement la même technique, ça ne marche pas (j'obtiens des strings en chinois (avec des caractères chinois au lieu des caractères normaux... bizarre, ça ^^).

EDIT : bon, je viens de comprendre, c'était tout con, j'avais coché enregistrer en unicode la dll... Quelle nouille je suis ^^