DLL里的Dialog.DoModal返回-1

今天简直是太郁闷了,昨天好好的程序,今天早上来了突然运行不了。

回想昨天主要是新增了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/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值