我正在使用Mfc to Qt迁移解决方案,将我的Mfc插件迁移到Qt。 我的Mfc插件加载在第三方Mfc应用程序中。基本上我使用以下示例Qt based Application Extension:
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;
}
我在Qt Sources中读取了pluginInstance函数的代码,并注意到pluginInstance调用了LoadLibrary和SetWindowsHook。
到目前为止,一切正常。但我有以下担忧: 禁止从DllMain中的SetWindowsHook调用来自user32.dll的LoadLibrary和函数。我在msdn doc中读到了DllMain。那么,如果这是不安全的,为什么官方的Qt网站会说在DllMain中调用pluginInstance? Qt based Application Extension 也许我错过了什么
答案 0 :(得分:0)
也许他们没有阅读它:),但是可以安全地调用LoadLibrary()来获取一个不会调用其他'不安全'api的DLL,比如CreateThread()等,这只是一个建议,只要想想自己是什么从DLL_PROCESS_ATTACH调用LoadLibrary()时,继续加载,加载IAT,填充IAT并调用DllMain()。