在对话框中MS communication control (MSComm) 控件加载出奇怪问题(求救)

zzy380 2008-12-08 08:44:58
生成了一个非模态对话框,添加了按钮,文本框......一些自带控件,顺利生成该对话框,没有任何问题。
但加入了MSComm控件,就有问题了。具体出问题代码如下:
.h文件中:CMyDlg* m_pDlg;
.cpp中:m_pDlg = new CMyDlg;
m_pDlg->Create(IDD_MYDLG); // 问题出在这里
m_pDlg->ShowWindow(SW_SHOW);

new得时候应该没有问题,可以顺利调用构造函数,但一执行到Create就出问题了,然后赋值得到BOOL flag = m_pDlg->Create(IDD_MYDLG);中发现flag为FALSE。跟踪一下,似乎是LoadResource有问题。但不知道应该怎么改???
如果是模态对话框也还是那样,弹不出来对话框。加上MSComm控件,只是用鼠标点了一下,加在了对话框上,没有写任何有关得代码。
如果去掉该控件,马上就没有问题了!

由于我是在一个很大得工程(别人写好的程序,代码很多,而且编译通过,没有什么问题)的基础上,添加一个非模态对话框,然后加上这个COM控件就有问题了。我也尝试了自己新建一个工程,然后添加一个对话框,再加上COM控件,没有任何问题。

但是在已有的这个工程上加,就出问题了,请大家给予指教,万分感谢!
...全文
101 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zzy380 2008-12-09
[Quote=引用 10 楼 sys0006 的回复:]
控件是COM组件

使用COM组件前要做初始化操作,也就是要调用CoInitialize();
MFC程序里的AfxEnableControlContainer内部也会调用CoInitialize()。
[/Quote]

谢谢sys0006大师!终于明白了!结帖给分了!
回复
sys0006 2008-12-08
[Quote=引用 9 楼 zzy380 的回复:]
引用 4 楼 cnzdgs 的回复:
创建对话框之前加上一行:
AfxEnableControlContainer();


谢谢cnzdgs大师,果然,加上这句之后,终于产生对话框了,OK了!实在太感谢了,这个bug困扰了我一整天。
但是您能解释下为什么要这样么?为什么我在自己新建的工程中是没有这个问题的,怎么在这里还要自己手动加上这个函数呢?

稍候马上结帖!

同时也非常感谢sys0006
还有友情支持的朋友
[/Quote]

你用向导创建时有一个支持ActiveX control选项的,默认是选择的,它会自动添加AfxEnableControlContainer();在InitInstance里。
回复
sys0006 2008-12-08
控件是COM组件

使用COM组件前要做初始化操作,也就是要调用CoInitialize();
MFC程序里的AfxEnableControlContainer内部也会调用CoInitialize()。
回复
zzy380 2008-12-08
[Quote=引用 4 楼 cnzdgs 的回复:]
创建对话框之前加上一行:
AfxEnableControlContainer();
[/Quote]

谢谢cnzdgs大师,果然,加上这句之后,终于产生对话框了,OK了!实在太感谢了,这个bug困扰了我一整天。
但是您能解释下为什么要这样么?为什么我在自己新建的工程中是没有这个问题的,怎么在这里还要自己手动加上这个函数呢?

稍候马上结帖!

同时也非常感谢sys0006
还有友情支持的朋友
回复
zzy380 2008-12-08
也没有发出WM_INITDIALOG 消息。应该和初始化没有关系,没有定义CMSComm m_Serial,也没有写任何相关代码。在自己新建的其他工程中没有问题
回复
qap22 2008-12-08
友情up
回复
ilovedrv 2008-12-08
ms com控件怎么初始化的
回复
sys0006 2008-12-08
[Quote=引用 3 楼 zzy380 的回复:]
引用 1 楼 cnzdgs 的回复:
是不是程序没初始化COM?

怎么知道有没有被初始化呢?在哪里修改呢?
[/Quote]

Coinitialize();
回复
cnzdgs 2008-12-08
创建对话框之前加上一行:
AfxEnableControlContainer();
回复
zzy380 2008-12-08
[Quote=引用 1 楼 cnzdgs 的回复:]
是不是程序没初始化COM?
[/Quote]
怎么知道有没有被初始化呢?在哪里修改呢?
回复
zzy380 2008-12-08
刚才看了一下,好像在CreateIndirect这里就有问题了,正常情况下,执行该函数过程中,会调用OnInitDialog,但是加上MSComm控件之后就没有调用直接跳到下一句:FreeResource(hTemplate);了,CreateIndirect返回为0;
回复
cnzdgs 2008-12-08
是不是程序没初始化COM?
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-12-08 08:44
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……