Envoyer typedef structure à DLL

Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006 - 11 juin 2005 à 19:41
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006 - 12 juin 2005 à 00:57
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

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
11 juin 2005 à 19:45
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)
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006
11 juin 2005 à 19:55
Je n'ai pas compris désolé, allouer var, var1 et var 2 ? comment ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 juin 2005 à 20:01
VAR * info;
est un pointeur qui pointe où ???

ciao...
BruNews, MVP VC++
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006
11 juin 2005 à 20:09
typedef struct {

std::string var;

std::string var1;

std::string var2;

} VAR;



non ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 juin 2005 à 20:28
ç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++
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006
11 juin 2005 à 20:53
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;

}
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
11 juin 2005 à 23:17
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)
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006
12 juin 2005 à 00:57
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.
0
Rejoignez-nous