2009-11-05 6 views
0

J'utilise la solution de migration Mfc to Qt pour migrer mon plugin Mfc vers Qt. Mon plugin Mfc est chargé dans une application Mfc tierce. En fait, je suis en utilisant l'exemple suivant Qt based Application Extension:Migration DllMain et Qt Mfc

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID ) { 
static bool ownApplication = FALSE; 
if (dwReason == DLL_PROCESS_ATTACH) 
    ownApplication = QMfcApp::pluginInstance(hInstance); 
if (dwReason == DLL_PROCESS_DETACH && ownApplication) 
    delete qApp; 
return TRUE; 
} 

lire le code de la fonction pluginInstance, int les sources Qt, et notez que les appels pluginInstance LoadLibrary et SetWindowsHook à l'intérieur.

Tout fonctionne bien, jusqu'à présent. Mais j'ai la préoccupation suivante: Il est interdit d'appeler LoadLibrary et les fonctions de user32.dll comme SetWindowsHook de DllMain. J'ai lu cela dans msdn doc pour DllMain. Donc, si cela est dangereux, pourquoi le site officiel Qt dit d'appeler pluginInstance dans DllMain? Peut-être que je manque quelque chose

Répondre

0

peut-être qu'ils ne l'ont pas lu :), mais il est sûr d'appeler LoadLibrary() pour une DLL qui n'appelle pas d'autres 'apis' comme CreateThread() etc, il est Juste une suggestion, il suffit de penser à ce qui se passe lorsque vous appelez LoadLibrary() depuis DLL_PROCESS_ATTACH, la bibliothèque est chargée, IAT rempli et DllMain() appelé.