c++ - 避免资源冲突

标签 c++ mfc

我有一个 MFC exe,试图动态加载一个 MFC dll。

// This is code in MFC exe
HINSTANCE h = AfxLoadLibrary(_T("DLL.dll"));
typedef void(*FUN)();
FUN fun = (FUN)GetProcAddress(h, "loveme");
FreeLibrary(h);

MFC exe和MFC dll都有自己的资源文件。

但是,我意识到,如果 MFC exe 和 MFC dll 具有相同的资源 ID,则可能会发生冲突。

// This is code in MFC dll. Both exe and dll, are having resources with
// ID 101.
CString s;
s.LoadString(101);
// Resource 101 in exe is being shown :(
AfxMessageBox(s);

我可以知道如何避免资源 ID 冲突问题吗?能否在MFC和DLL中同时拥有两个资源,虽然ID不同,但相互独立?

这意味着,DLL 只会加载 DLL 的资源。 EXE 只会加载 EXE 的资源。

最佳答案

您需要为自己保留跟踪句柄,该句柄将在 dllmain 期间传入。

HINSTANCE hDLLInstance = 0;

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    hDLLInstance = hInstance;
    ...
}

然后当你想引用本地资源(即LoadString)时,传递dll句柄

...
CString s; 
s.LoadString(hDLLInstance, 101); 
AfxMessageBox(s); 
...

关于c++ - 避免资源冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3060440/

相关文章:

c++ - Visual Studio 构建错误 : unresolved external symbol _IID_IWICImagingFactory (MFC static lib)

c++ - 使用 boost::optional 制作可选的 std::function 参数

c++ - 存储各种尺寸也各不相同的结构的好方法?

c++ - "The Parameter Is Incorrect"MFC异常

c++ - 如何处理 ListCtrl 标题中的右键单击事件?

c++ - MFC显示透明背景的png

multithreading - 如何使用MFC CriticalSection?

C++:扩展模板类

c++ - 是否可以同时使用 C++11 ABI _and_ cxx11 风格和旧式字符串?

c++ - 如何让 QTextBrowser 始终在末尾插入文本