Envoyer typedef structure à DLL

Signaler
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
-
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
-
Hello,



Voilà pour faciliter l'envoie de données à une dll, je crée une structure typdef:



typedef struct {

std::string var;

std::string var1;

std::string var2;

} VAR;



Puis un prototype (comme ça que ça s'appelle ?) de la fonction exporté de la dll:



typedef void (*INFO) (VAR* info);

INFO fInfo = (INFO)GetProcAddress(hDll, (LPCSTR)"loadinfo");



Puis je remplis ces variables:



VAR * info;



info->var1.assign("donnée 1");

info->var1.assign("donnée 2");

info->var1.assign("donnée 3");



et j'envois le tout à la dll:



fInfo(info);



La fonction exporté de la DLL:



int __stdcall loadinfo(VAR * info)

{



MessageBox(0, info->var1.c_str(), info->var2.c_str(), 0);

return 0;

}



-----------------------------------------------------------



Voilà, ça ne marche pas, je pense que l'erreur se trouve dans l'exe et non dans la dll:

Prototype mal déclaré ? Merci de votre aide en tout cas.



PS: la balise [code] ne semble pas marcher, comment on fait ?

8 réponses

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Tu n'alloue pas de memoire a ta variable, pense a une allocation dynamique (je pense obligatoire), et tu appelles comme ca : fInfo(info); .

+2(p - n)
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006

Je n'ai pas compris désolé, allouer var, var1 et var 2 ? comment ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
VAR * info;
est un pointeur qui pointe où ???

ciao...
BruNews, MVP VC++
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006

typedef struct {

std::string var;

std::string var1;

std::string var2;

} VAR;



non ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
ça c'est la définition de structure, ensuite faut une place pour une variable de ce type.

VAR v;
v.membre1 = ....;

ciao...
BruNews, MVP VC++
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006

J'ai modifié comme ça:



typedef void (*INFO) (VAR info);



VAR info;



info.membre1 = "test";



on envoie : fInfo(info);



Ok, ça a l'air de marcher, mais si je rajoute un membre2, le programme
plante après la deuxiéme messagebox de la fonction exporté:



int __stdcall loadinfo(VAR info)

{

MessageBox(0, info.membre1.c_str(), "membre1", 0);

MessageBox(0, info.membre2.c_str(), "membre2", 0);

//Plantage

return 0;

}
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
VAR *info;

info = malloc(...);
info->membre1 = ...;
fInfo(info);
free(info);

Dans le cas que tu as cité, l'appel aurait été fInfo(&info);

+2(p - n)
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006

Mon probléme est résolu dans l'exe mais pas dans la dll, je ne vois pas pourquoi ça bug.

Surtout qu'il bug à la toute fin.