用DoModal函数以后,返回值是-1。
本来在VC5.0+Win98下是可以的,现在用的是VC6.0+Win2000怎么不成了?
问题出在资源句柄上面.
解决方案(I)
DWORD dwLastErr = NO_ERROR;
//AFX_MANAGE_STATE宏将在堆栈中创建一个临时对象
//在退出的时候自动删除,当前进程产生错误码也别清除
//因此我们要把下面代码放在一对扩号中,以确保在这之前可以得到错误码
//注意:不要在这对括号之外调用MFC代码
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDlg dlg;
if (dlg.DoModal() == IDOK)
{
......
}
dwLastErr=::GetLastError();
}
if(::GetLastError()==NO_ERROR) ::SetLastError(dwLastErr);
解决方案(II)
(II)
//指向DLL的句柄
HMODULE hDLL;
在DllMain的时候赋值.
或者用 hDLL=GetModuleHandle("yourdll.dll") 的形式获取.
//获去指向当前资源的句柄
HINSTANCE hEXE=AfxGetResourceHandle();
AfxSetResourceHandle((HINSTANCE)hDLL);
CDlg dlg;
if (dlg.DoModal() == IDOK)
{
......
}
AfxSetResourceHandle(hEXE);
