好头疼的问题,DLL中使用MessageBox, 总是错
在动态链接库中使用MessageBox
(1) ::MessageBox(0, "xx ", "xxx ", MB_OK);
(2) ::MessageBox(m_hWnd, "xx ", "xxx ", MB_OK); //Dll中一个窗口的句炳
(3) ::MessageBox(m_hFrame, "xx ", "xxx ", MB_OK); //主程序中一个窗口的句炳
(4) AfxMessageBox( "xxx ");
(5) this-> MessageBox( "xxx "); //在窗口类的成员函数中调用
不管怎么用,都是出错,折磨我一上午了,编译都通过,出错是:
0xC0000005: Access Violation
干脆我就自己写了一个对话框然后
HINSTANCE old_hinst = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
CMyDlg dlg;
dlg.DoModal();
AfxSetResourceHandle(old_hinst);
还是出现错误
0xC0000005: Access Violation
大侠帮帮我!!!
[解决办法]
不管怎么说,
(1) ::MessageBox(0, "xx ", "xxx ", MB_OK);
这句应该不需要用到什么AfxManageModuleState的,如果这句也出错的话,只能说明在这个Create2函数中不能有消息循环。肯定在调用这个函数的过程时干了些比较恶心的事情。
[解决办法]
我以前也遇到过这个问题,后来发现问题不是出在这个MESSAGEBOX上,也不是出在XXXDIALOG.DOMODAL上,而是出在.................不要使用CSTRING上,一用就要死掉,后来我的程序全使用wchar_t xxx[],用着用着发现还是很顺手的,另外,你如果无法使用MessageBox的话,你也一定无法读写文件,不信你试试.而且无法使用_beginthread()之类的函数,烦吧.后面还有得烦呢,我一个超大的SDK工程就是这样走过来的,错误了N次,N大于100,因为与WINLOGON相关,所以每一次都要重启2次(第一次清除,以免再次启动自动加载又死了,另一次才是正常启动),所以就这么重启了近三百次.