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;
}

pluginInstance 関数のコードを読んで、Qt ソースを int すると、pluginInstance が内部で LoadLibrary と SetWindowsHook を呼び出していることに気付きました。

これまでのところ、すべてが正常に機能しています。しかし、次の懸念があります。DllMain から SetWindowsHook のように、user32.dll から LoadLibrary と関数を呼び出すことは禁止されています。DllMainのmsdn docでそれを読みました。では、これが安全でない場合、公式 Qt サイトが DllMain で pluginInstance を呼び出すように言っているのはなぜですか? Qtベースのアプリケーション拡張機能

4

1 に答える 1

0

たぶん彼らはそれを読んでいません:)、しかし、CreateThread() などの他の「安全でない」API を呼び出さない DLL に対して LoadLibrary() を呼び出すことは安全です。これは単なる提案です。 DLL_PROCESS_ATTACH から LoadLibrary() を呼び出すと、ライブラリがロードされ、IAT が読み込まれ、DllMain() が呼び出されます。

于 2009-11-30T02:27:07.323 に答える