AfxLoadLibrary与LoadLibrary

Mat*_*vis 4 c++ dll mfc visual-studio visual-c++

我有一个MFC应用程序需要动态加载DLL.DLL将用于检索运行时值,然后卸载.我是否需要创建一个MFC DLL并通过它加载它,AfxLoadLibrary()或者我可以创建一个传统的C++ DLL并使用Win32 LoadLibrary()调用吗?有关系吗?

Han*_*ant 8

它在MSDN Library文章的备注部分中明确提到:

如果您的应用程序使用多个线程并且它动态加载扩展DLL,请务必使用AfxLoadLibrary和AfxFreeLibrary(而不是Win32函数LoadLibrary和FreeLibrary).使用AfxLoadLibrary和AfxFreeLibrary可确保在加载和卸载扩展DLL时执行的启动和关闭代码不会破坏全局MFC状态.

因此,如果您正在加载包含MFC代码的DLL,或者如果您在程序中使用线程,那么您应该使用它.

也就是说,至少在现代版本的MFC中,AfxLoadLibrary()没有做任何特别的事情:

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName)
{
     ASSERT(lpszModuleName != NULL);
     HINSTANCE hInstLib = LoadLibrary(lpszModuleName);
     return hInstLib;
}
Run Code Online (Sandbox Code Playgroud)

所以,如果你猜错了,那么没有什么事情会被严重打击.谢天谢地.

  • MFC代表"包含MFC代码的DLL".这就是状态doowop的意思,这样的DLL必须连接到MFC应用程序模型. (3认同)