4

DLL を動的にロードする必要がある MFC アプリケーションがあります。DLL は、実行時の値を取得してからアンロードするために使用されます。MFC DLL を作成し、それを介してロードする必要がありますか、AfxLoadLibrary()または従来の C++ DLL を作成して Win32LoadLibrary()呼び出しを使用できますか? それは問題ですか?

4

2 に答える 2

8

これは、MSDN ライブラリの記事の備考セクションで明示的に言及されています。

アプリケーションが複数のスレッドを使用し、拡張 DLL を動的にロードする場合は、(Win32 関数 LoadLibrary および FreeLibrary の代わりに) AfxLoadLibrary および AfxFreeLibrary を必ず使用してください。AfxLoadLibrary と AfxFreeLibrary を使用すると、拡張 DLL のロード時およびアンロード時に実行されるスタートアップ コードとシャットダウン コードがグローバル MFC 状態を破損しないことが保証されます。

したがって、MFC コードを含む DLL をロードしている場合、またはプログラムでスレッドを使用している場合は、それを使用する必要があります。

そうは言っても、少なくとも最新バージョンの MFC では、AfxLoadLibrary() は特別なことは何もしません。

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName)
{
     ASSERT(lpszModuleName != NULL);
     HINSTANCE hInstLib = LoadLibrary(lpszModuleName);
     return hInstLib;
}

したがって、これを間違って推測しても、何もひどく爆発することはありません. よかった。

于 2012-12-19T21:00:40.657 に答える
3

MFC をまったく使用しないプレーンな C++ DLL を作成している場合は、MFC DLL を作成する必要はなく、plain を使用できるはずですLoadLibrary()

于 2012-12-19T20:58:10.047 に答える