我创建了一个MFC Regular DLL using shared MFC DLL,在其中插入了一个对话框 (CEmu),然后在该项目中定义了一个API函数:BOOL WINAPI TestAboutBox()
{
CEmu mu;
int a = mu.DoModal();
return TRUE;
}调用该函数时,对话框无法显示出来,上面函数中 DoModal() 的返回值为-1,跟踪进去,看到 m_hDialogTemplate 的值为 NULL。请问这是怎么回事?非常感谢您的帮助!
{
CEmu mu;
int a = mu.DoModal();
return TRUE;
}调用该函数时,对话框无法显示出来,上面函数中 DoModal() 的返回值为-1,跟踪进去,看到 m_hDialogTemplate 的值为 NULL。请问这是怎么回事?非常感谢您的帮助!
定义全局变量CEmu * m_pDlg;
在需要创建的时候m_pDlg = new CEmu(),然后调用窗口显示函数m_pDlg->ShowWindow
按你说的改了之后,还是出错:Debug Assertion Failed!File: winocc.cpp
Line: 301
{
CEmu mu(CWnd::FromHandle(hMainWnd));
int a = mu.DoModal();return TRUE;
}hMainWnd--->主程序传过来的窗口句柄。
{
DWORD dwLastErr = NO_ERROR; //
// surround the code in brackets, which will cause the temporary
// object created by AFX_MANAGE_STATE to be destroyed before leaving
// the exported function.
//
// NOTE : Do NOT call MFC code outside of these brackets.
//
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyLocalDialog dlg;
dlg.Arg1 = MyData1; //specific local data for MyLocalDialog
dlg.Arg2 = MyData2;
dlg.DoModal();
MyData1 = dlg.Arg1; //data after processing
MyData2 = dlg.Arg2; //
// save possible errors
//
dwLastErr = ::GetLastError();
} //
// only set error if none is currently set.
// (last error will always be NO_ERROR _unless_
// TlsGetValue failed earlier)
//
if (::GetLastError() == NO_ERROR)
::SetLastError(dwLastErr);
}
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CEmu mu(AfxGetMainWnd());
int a = mu.DoModal(); return TRUE;
}
我是从 wshcdr(dd) 给的链接页面里看到的链接中找到的解决办法:http://support.microsoft.com/default.aspx?scid=kb;EN-US;194300非常感谢 wshcdr(dd)!
{
CEmu mu(CWnd::FromHandle(hMainWnd));
int a = mu.DoModal();return TRUE;
}
// mu是局部变量
在TestAboutBox返回的时候
它的生命期已经结束了你可以动态创建这个对话框
CEmu *mu = new CEmu();
mu->create(参数);
mu->ShowWindow(SW_SHOW);
并在函数的开始处加上
AFX_MANAGE_STATE(AfxGetStaticModuleState())
试试行不行