我有一个需要动态加载 DLL 的 MFC 应用程序。DLL 将用于检索运行时值,然后被卸载。我需要创建一个 MFC DLL 并通过加载它AfxLoadLibrary()
还是可以创建一个传统的 C++ dll 并使用 Win32LoadLibrary()
调用?有关系吗?
问问题
3317 次
2 回答
8
MSDN 库文章的备注部分明确提到了这一点:
如果您的应用程序使用多个线程并且动态加载扩展 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;
}
所以如果你猜错了,没有什么会发生严重的爆炸。谢天谢地。
于 2012-12-19T21:00:40.657 回答
3
如果您正在创建一个根本不使用 MFC 的普通 C++ DLL,则不需要创建 MFC DLL,您应该能够使用普通LoadLibrary()
的 .
于 2012-12-19T20:58:10.047 回答