今天简直是太郁闷了,昨天好好的程序,今天早上来了突然运行不了。
回想昨天主要是新增了VC的一个时间控件和一LISTVIEW控件。去除,然后得新生成DLL,重新测试,不行。一开始是运行是调用DLL生成对话框没反应,不知道什么原因,后来查发现是什么NTDLL这个动态库不匹配,一大堆的不匹配,这可能程序昨天不能“CANNOT ADD NEW MEMBER”我修改了程序的原因,然后重新编译DLL,加入测试程序,仍然不成。然后我换掉了当前对话框,生成另外一个。结果重新编译后加到测试工程里成功了。现在可以判定程序的原因了。
下断点,跟踪进了DLL,发现DOMODAL竟然返回了一个-1,郁闷。然后查MSDN,上网查资料,找到了一些方法,比如删除NCB文件,但经过测试,发现不可以。
后来重新建了一个DLG,把原有资料全部拷过去,运行成功。然后找到以下资料:
DoModal失败原因
1、MFC
通常对话框不显示的原因有
1 父窗口HWND无效
2 在ONINITDIALOG里用了ENDDIALOG
3 无效的对话框资源ID
4 使用没有注册的的自定义控件
5 对话框的某些控件创建失败,如RICHEDIT,要加上AfxInitRichEdit();
最有可能出现的是第3条,因此,又经过仔细分析了对话框中的各个资源的ID,终于找到了问题,原来是出在一个菜单栏的ID上面, 在对话框的属性的菜单栏中有一个ID(因为这个对话框是复制过来的,而且原来的对话框有菜单栏的,但是现在这个对话框没有),所以呢,ID虽然存在,但 是,现在的程序中并没有对应的资源,所以,通过讲菜单栏那项设置为空,这样,程序就OK了。
2、dll
使用:
AFX_MAMAGE_STATE(AfxGetStaticModuleState());
CTestDlg dlg;
int rlt = dlg.DoModal();
3、前些日子做一个项目中,需要用到一个对话框。 但是对该对话框使用DoModal函数后该对话框死活弹不出来,单步跟踪的时候也没发现什么大问题。在网上搜索了很多方法都不奏效。后来发现原来是该对话框的属性里面设置了 WS_CHILD 属性。把该属性去掉程序立即可以成功运行了。在项目开发过程中这种问题是最令人心烦的,虽然不是很复杂,却也令人头疼不已。在这里写出来希望对大家有所帮助
4、当unicode时候,对话框不显示~~~,改为多字符则可以,郁闷,·又是一晌
通过事后认真分析,我认为极可能也是资源中有无效的ID,因为昨天我增删了一些新增的时间控件,而且我改掉了对话框的类后就产生了N多的错误,虽然都改了过来,但还是发现有问题,然后今天终于爆发出来了。
以前就遇到过这种现象,但后来用C#做界面较多,这种现象也就忽略了,今天再次遇到,感慨非常。
转自http://fpcfjf.blog.163.com/blog/static/55469793200984102613814/