Visual Studio AfxLoadLibrary与LoadLibrary的比较

bq8i3lrv  于 2022-11-25  发布在  其他
关注(0)|答案(3)|浏览(162)

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

cbjzeqam

cbjzeqam1#

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

所以如果你猜错了,没有什么会爆炸得很厉害。谢天谢地。

zazmityj

zazmityj2#

如果您要建立完全不使用MFC的一般C++ DLL,就不需要建立MFC DLL,而且应该可以使用一般的LoadLibrary()

zour9fqk

zour9fqk3#

@HansPassant的答案不正确!尽管这是atlmfc\dlinit.cpp中使用的代码,但函数LoadLibrary将调用IsolationAwareLoadLibrary!其源代码位于WinBase. Inl中。例如,您可以使用反汇编程序轻松验证这一点。因此,在windows操作系统中,如果您不确定该库是否使用MFC,然后总是调用AfxLoadLibrary!!!这就是为什么通常不能使用boost::dll::shared_library

相关问题