DLL : passer une variable en paramètre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

DLL : passer une variable en paramètre

Message 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.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: DLL : passer une variable en paramètre

Message 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()
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: DLL : passer une variable en paramètre

Message 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 ....
Dernière modification par Backup le lun. 12/mai/2014 12:56, modifié 1 fois.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: DLL : passer une variable en paramètre

Message 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 ^^
Répondre