Appeler une fonction depuis une dll

cs_pichu Messages postés 28 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 8 juin 2005 - 11 août 2004 à 18:52
cs_pichu Messages postés 28 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 8 juin 2005 - 12 août 2004 à 15:25
bonjour,
je voudrais savoir comment il pourrait être possible depuis une dll, d'apeler une fonction public de l'application ayant appelé cette même dll.
De même pour l'accès à une variable public du programme principal.

merci à vous.

++

7 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 août 2004 à 18:57
Arnotic a fait une source demo de cela.
Tu dois donner a la dll un pointeur sur cette fonction sinon elle n'en aura pas connaissance.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_pichu Messages postés 28 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 8 juin 2005
11 août 2004 à 22:08
ok, j'avais pourtant cherche..
je pense que c callback dll le sujet, faut le savoir
merci beaucoup
0
cs_pichu Messages postés 28 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 8 juin 2005
12 août 2004 à 13:16
le source n'est pas du VC++... n'y en a t'il pas eu speciale visual C++?
merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 août 2004 à 13:23
Arnotic n'emplois QUE VC++, est en version 2003.
Refais tes projets vides et te suffit de copier le code ou direct les fichiers dans tes projets.

ciao...
BruNews, Admin CS, MVP Visual C++
0

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

Posez votre question
cs_pichu Messages postés 28 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 8 juin 2005
12 août 2004 à 14:52
je n'y arrive pas

je fait dans mon exe :
void InitExp::appel_dll()
{

HINSTANCE hDLL;
typedef int (__stdcall* lpDemandeCallBack) (DWORD dwAddrCallBack);
lpDemandeCallBack DemandeCallBack;

hDLL = LoadLibrary("testdll2.dll");

if (hDLL == NULL)
AfxMessageBox( "Impossible d'accéder à la DL.");

DemandeCallBack = (lpDemandeCallBack) GetProcAddress((HINSTANCE)hDLL, "DemandeCallMyCallBack");

if (DemandeCallBack == NULL)
AfxMessageBox("Impossible de trouver l'adresse de la fonction");

DemandeCallBack(&InitExp::MyCallBack);

FreeLibrary((HINSTANCE)hDLL);

}

void __stdcall CALLBACK InitExp::MyCallBack(char *szMsg) {
AfxMessageBox(szMsg);
}

et dans la dll :

void MyCallBack(char *szMsg);

void DemandeCallMyCallBack(DWORD dwAddrCallBack)
{

AfxMessageBox("dans dll");
typedef int (__stdcall* lpMyCallBack) (LPSTR szMsg);
lpMyCallBack MyCallBack;

MyCallBack = (lpMyCallBack) dwAddrCallBack;
MyCallBack("Petit coucou de la DLL.");

}

je n'arrive pas a passer un parametre que le compilateur accepte dans DemandeCallBack(&InitExp::MyCallBack);

comment faire?
merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 août 2004 à 14:57
C'est pas vrai, encore MFC et ennuis qui vont avec...

Declare fonction en __stdcall (ou WINAPI idem) pour qu'elle ait adresse fixe connue a la compilation.
Idem dans les classes func doit etre mise 'static' pour adresse fixe.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_pichu Messages postés 28 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 8 juin 2005
12 août 2004 à 15:25
le pb est a la compilation, le cimpilateur fait une erreur a la ligne ou il y a DemandeCallBack(&InitExp::MyCallBack);

il me dit : error C2664: 'int (unsigned long)' : cannot convert parameter 1 from 'void (__stdcall *)(char *)' to 'unsigned long'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast

je n'y connait rien en pointeur de fonctions, et je sais pas quoi lui mettre d'autre en parametres..
le fait de mettre __stdcall et de mettre static MyCallBack ne change pas le pb d'erreur de compilations

au fait est il posssible de passer a la dll un pointeur de l'appli exe pour que le dll puisse acceder aux fonction et variables publiques?

merci
0
Rejoignez-nous