Appeler une fonction depuis une dll

Signaler
Messages postés
28
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
8 juin 2005
-
Messages postés
28
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
8 juin 2005
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
28
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
8 juin 2005

ok, j'avais pourtant cherche..
je pense que c callback dll le sujet, faut le savoir
merci beaucoup
Messages postés
28
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
8 juin 2005

le source n'est pas du VC++... n'y en a t'il pas eu speciale visual C++?
merci
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
28
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
8 juin 2005

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
28
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
8 juin 2005

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