我有一个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的资源。
AfxGetInstanceHandle()是很好的解决方案时,MFC可以使用。 – YeenFei 2010-06-17 09:57:51
我提到'AfxGetInstanceHandle()',因为OP使用的是MFC DLL。否则,我会为你的'DllMain'解决方案。 – 2010-06-17 10:00:25
我试过了,AfxGetInstanceHandle()会返回EXE句柄,而不是DLL。然而,YeenFei的解决方案仍然有效。 – 2010-06-18 02:43:03