MFC dll을 동적으로로드하려고 시도하는 MFC exe가 있습니다.리소스 충돌 방지
// 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 충돌 문제를 피할 수있는 방법을 알고 있습니까? ID가 다르긴하지만 MFC와 DLL 모두에 두 개의 리소스가있을 수 있지만 서로 독립적입니다.
즉, DLL은 DLL의 리소스 만로드합니다. EXE는 EXE의 리소스 만로드합니다.
AfxGetInstanceHandle()는 좋은 솔루션을 전달합니다. – YeenFei
OP가 MFC DLL을 사용하기 때문에'AfxGetInstanceHandle()'에 대해 언급했습니다. 그렇지 않으면, 나는 당신의'DllMain' 솔루션으로 갈 것입니다. –
AfxGetInstanceHandle()은 DLL이 아닌 EXE 핸들을 반환합니다. 그러나 YeenFei의 솔루션은 작동합니다. –