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 :
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;
}
... et que je créé avec les commandes :
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
Je la charge ensuite dans un autre petit programme :
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;
}
... compilé par :
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
Je lance alors gdb :
... et j'obtiens :
L'erreur 6 signifie "Invalid handle" ou "Descripteur non valide" d'après MSDN.
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