2009-11-05 57 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()被调用。