Bonjour,
J'ai un soucis avec GDB et la fonction LoadLibrary de l'API windows. Peut-être quelqu'un aura une idée d'où ça vient, moi je pêche...
J'ai donc une petite DLL de test, compilée à partir du code suivant :
... et que je créé avec les commandes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include <gl\gl.h> #include <windows.h> void __declspec(dllexport) SomeFunction() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { return TRUE; }
Je la charge ensuite dans un autre petit programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mingw32-g++.exe -g -c DLLmain.cpp -o DLLmain_d.o mingw32-g++.exe -shared -Wl,--dll DLLmain_d.o -o maDLL_d.dll -lOPENGL32
... compilé par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include <windows.h> #include <iostream> int main(int argN, char** args) { HMODULE mhInst = LoadLibrary("maDLL_d"); if (!mhInst) { std::cout << "## problem : " << GetLastError() << std::endl; return 1; } return 0; }
Je lance alors gdb :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mingw32-g++.exe -g -c main.cpp -o main.o mingw32-g++.exe main.o -o test_d.exe
... et j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 gdb test_d.exe > run
L'erreur 6 signifie "Invalid handle" ou "Descripteur non valide" d'après MSDN.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ## problem : 6
Le problème ne survient que si ma DLL est linkée avec opengl32 ou d3d9 (je n'ai pas tout testé, mais ces deux bibliothèques ne fonctionnent pas en tout cas), et seulement si le programme est lancé via le debuggeur. Sinon tout fonctionne à merveille...
C'est un soucis qui n'est apparu que récemment, je ne sais trop pourquoi...
J'utilise la dernière version de MinGW G++ (4.5.2) avec GDB 7.2, mais le problème se posait aussi avec G++ 4.4 et GDB 6.8...
Merci d'avance !
(je n'ai pas trouvé de bon forum de support pour MinGW. Si vous en connaissez un, ça sera peut être plus adéquat)
Edit : question également posée sur le Nabble de MinGW
Partager