2009-11-05 54 views
0

我正在使用Mfc到Qt的遷移解決方案,將我的Mfc插件遷移到Qt。 我的Mfc插件已加載到第三方Mfc應用程序中。基本上我用下面的例子Qt based Application ExtensionDllMain和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; 
} 

我讀pluginInstance功能的代碼,詮釋了Qt源,並注意pluginInstance調用LoadLibrary和SetWindowsHook內。

到目前爲止,一切正常。但我有以下幾點: 禁止從DllMain的SetWindowsHook調用LoadLibrary和user32.dll的函數。我在DllMain的msdn文檔中讀到了這個。那麼,如果這是不安全的,爲什麼官方的Qt站點說在DllMain中調用pluginInstance? Qt based Application Extension 也許我失去了一些東西

回答

0

也許他們沒有讀它:),但可以安全地調用LoadLibrary()爲一個不調用像CreateThread()等其他'不安全'apis的DLL,它是隻是一個建議,想想當你從DLL_PROCESS_ATTACH調用LoadLibrary()時,會發生什麼情況,庫被載入,IAT被填充以及DllMain()被調用。