DLL被其它程序调用时,无法获取自身正确的Handle导致
1、重写调用方法
模态框重写virtual INT_PTR DoModal();
非模态框重写virtual BOOL Create(UINT nIDTemplate);
根据实际调用情况,重写方法
2、重写方法主代码
HINSTANCE hInstOld = AfxGetResourceHandle();
AfxSetResourceHandle(GetSelfModuleHandle());
//方法内代码,一般此处为调用父方法代码
AfxSetResourceHandle(hInstOld);// 重新设置回instance
return XXX;
3、GetSelfModuleHandle方法实现
HMODULE GetSelfModuleHandle(){
MEMORY_BASIC_INFORMATION mbi;
return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0)
? (HMODULE) mbi.AllocationBase : NULL);
}
网友评论