我有一個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