Salut !
Je reprend (pour mon stage) le code d'une DLL que quelqu'un d'autre a écrit, et j'ai besoin de créer une fonction dans une DLL existante, et de l'utiliser dans une autre DLL (qui elle même est utilisée par un programme).
Spa très clair, mais c'est pas grave.
Donc dans le .h de la DLL dans lequelle je veux que soit ma fonction, je met :
Code :
- extern "C"
- {
- _declspec(dllexport) void maFonction();
- ... // Les autres fonctions
- }
|
Dans le .cpp :
Code :
- extern "C"
- {
- _declspec(dllexport) void maFonction()
- {
- // Un corps vide pour l'instant
- }
- ... // Les autres fonctions
- }
|
Dans le .h de la DLL où je souhaite utiliser cette fonction :
Code :
- extern "C"
- {
- typedef void (*maFonction)();
- ... // Les autres fonctions
- }
|
Puis en protected :
Code :
- fnmafonction m_mafonction;
- proc& GetProc(int i);
- struct DescProc {int offset; const char* name;};
- static const DescProc DllFunctions[];
|
Et dans le .cpp :
Code :
- const RecalageNexyad::DescProc RecalageNexyad::DllFunctions[] =
- {
- {OFFSET(MaClasse,m_mafonction),"maFonction"},
- ...// Les autres fonctions
- };
- proc& RecalageNexyad::GetProc(int i)
- {
- assert(i>=0 && i<ARRAY_SIZE(DllFunctions));
- return *((proc*)(((char*)this)+DllFunctions[i].offset));
- }
|
Dans le constructeur de ma classe :
Code :
- //charger la lib
- hModule = (int)LoadLibrary("nom_de_ma_dll" );
- if (hModule==0)
- {
- cout << "Impossible de charger la DLL: " << endl;
- return;
- }
- //charger les fonctions
- for (i=0 ; i<ARRAY_SIZE(DllFunctions) ; i++)
- {
- GetProc(i) = GetProcAddress((HMODULE)hModule, DllFunctions[i].name);
- if (GetProc(i)==0)
- {
- cout << "Impossible de trouver la fonction " << endl;
- return;
- }
- }
|
Je ne peux pas malheureusement pas faire de debug (le programme qui appelle cette DLL plante si on veut se mettre en debug), mais avec un fichier texte, je sais que ma dll se charge bien, mais pas ma fonction.
Qu'est ce qui ne convient pas dans ce code ? Ca va faire 2j que je suis sur ce pb là, j'en peux plus !!
Merci d'avance !
Message édité par raph77 le 11-02-2003 à 12:49:38