0

我正在使用 Mfc 到 Qt 迁移解决方案,将我的 Mfc 插件迁移到 Qt。我的 Mfc 插件已加载到第三方 Mfc 应用程序中。基本上我正在使用以下基于 Qt 的应用程序扩展示例:

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。

到目前为止一切正常。但我有以下担忧:禁止从 user32.dll 调用 LoadLibrary 和函数,如 DllMain 中的 SetWindowsHook。我在 DllMain 的 msdn 文档中读到了这一点。那么,如果这是不安全的,为什么官方 Qt 站点说要在 DllMain 中调用 pluginInstance?基于 Qt 的应用程序扩展 也许我遗漏了一些东西

4

1 回答 1

0

也许他们没有读过它:),但是为不调用其他“不安全”api(如 CreateThread() 等)的 DLL 调用 LoadLibrary() 是安全的,这只是一个建议,只是想想你自己什么时候发生了什么您从 DLL_PROCESS_ATTACH 调用 LoadLibrary(),加载库,填充 IAT 并调用 DllMain()。

于 2009-11-30T02:27:07.323 回答