如果mfc想导出一个功能完整的对话框(类似于系统自带的打开文件),有时候会创建失败,或者在DoDataExchange函数内断言中断,提示找不到某控件资源。这是因为dll加载后,mfc把resourcehandle设置为exe的句柄,创建dll对话框时搜索的也是exe的资源,当然找不到了。起始解决的方法非常简单,加入你的dll名称为dlg.dll。只要在对话框创建的位置添加如下代码。
void CraeteXXX()
{
// 获取当前的resource handle准备创建完后恢复(自己想想为什么?)
HINSTANCE hOld = AfxGetResourceHandle();
HINSTANCE hDll = GetModuleHandle(L"dlg.dll");
//
AfxSetResourceHandle(hDll);
// 这里是你的创建代码
// ... ... ...
AfxSetResourceHandle(hOld);
}