MFC中一个对话框类调用另一个对话框中的Mscomm控件

weixin_40188149 2017-11-10 10:53:41
目前基于对话框程序中有两个对话框类CDataviewDlg和CMeasureDlg,
现在在CMeasureDlg中希望实现操作按钮IDC_MOVE,通过调用CDataviewDlg中的Mscomm控件(相关变量mmscomm),传递指令,并接收返回的数据,

于是想获取mmscomm指针来进行操作,代码如下

void CMeasureDlg::OnBnClickedMove()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
CString strSrc;
strSrc=_T("%R1Q,2107:\r\n");
CDataviewDlg*pDlg;
pDlg=(CDataviewDlg*)GetDlgItem(IDD_Dataview);
m_mmscomm=new CMmscomm;
m_mmscomm=&(pDlg->mmscomm);
m_mmscomm->put_Output(COleVariant(strSrc));
UpdateData(false);
}


当运行到 m_mmscomm->put_Output(COleVariant(strSrc))时,程序中断,

void AFX_CDECL CWnd::InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
void* pvRet, const BYTE* pbParamInfo, ...)
{
ASSERT(m_pCtrlSite != NULL); // not an OLE control (not yet, at least)

if (m_pCtrlSite == NULL)
return;

va_list argList;
va_start(argList, pbParamInfo);
m_pCtrlSite->InvokeHelperV(dwDispID, wFlags, vtRet, pvRet, pbParamInfo,
argList);
va_end(argList);
}

不知道如何解决,急求大牛解答,谢谢!
本人新手刚开始学习,希望最好有要修改的代码,谢谢了!
...全文
573 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2017-11-13
  • 打赏
  • 举报
回复
"是否可以把控件变量CMmscomm m_mmscomm,定义成全局变量," 不是不可以 ,但 程序结构会比较乱。也就是 回到 “面向过程”的 编程
weixin_40188149 2017-11-13
  • 打赏
  • 举报
回复
引用 12 楼 schlafenhamster 的回复:
"能否把控件的变量定义放在App里面" 最好方法 与对话框 存在与否 无关
我是否可以把控件变量CMmscomm m_mmscomm,定义成全局变量,如何进行调用 这样如果可行的话,感觉会简单一些,想问下应该修改哪些东西
schlafenhamster 2017-11-11
  • 打赏
  • 举报
回复
"能否把控件的变量定义放在App里面" 最好方法 与对话框 存在与否 无关
weixin_40188149 2017-11-10
  • 打赏
  • 举报
回复
引用
建议主窗口(含有MSCOMM控件的)中添加一个公共读写函数, 其它窗口通过这个函数接口来读写
是指添加全局变量吗? 不太懂,可以麻烦贴下代码吗
zgl7903 2017-11-10
  • 打赏
  • 举报
回复
建议主窗口(含有MSCOMM控件的)中添加一个公共读写函数, 其它窗口通过这个函数接口来读写
huawuque007 2017-11-10
  • 打赏
  • 举报
回复
引用 4 楼 xianglitian 的回复:
发消息到CDataviewDlg让他自己调用
可行,控件就是通过消息交互的嘛
weixin_40188149 2017-11-10
  • 打赏
  • 举报
回复
引用 9 楼 schlafenhamster 的回复:
"如果 m_mmscomm 已经 创建 成功" 就是 说 另一个 对话框 中的 m_mmscomm 已经 初始化 好,而不是 现在的对话框 再 new 一个。 其实 这个 m_mmscomm 最好 放 在 App 中。通过 CWinApp* pApp=AfxGetApp( );pApp-> m_mmscomm 就可以得到了。
需要调用的控件变量名是mmscomm; 而m_mmscomm是我为了在当前对话框调用mmscomm控件自己定义的; 我也想知道我在对话框中添加了一个CMSCOMM控件后,能否把控件的变量定义放在App里面,因为这样是否就可以作为全局变量直接调用了?
schlafenhamster 2017-11-10
  • 打赏
  • 举报
回复
"如果 m_mmscomm 已经 创建 成功" 就是 说 另一个 对话框 中的 m_mmscomm 已经 初始化 好,而不是 现在的对话框 再 new 一个。 其实 这个 m_mmscomm 最好 放 在 App 中。通过 CWinApp* pApp=AfxGetApp( );pApp-> m_mmscomm 就可以得到了。
weixin_40188149 2017-11-10
  • 打赏
  • 举报
回复
引用 7 楼 schlafenhamster 的回复:
m_mmscomm=new CMmscomm; 这是一个与原来无关的 新的 对象, 如果 m_mmscomm 已经 创建 成功,就不要这句!
删除这句后,中断依然存在
schlafenhamster 2017-11-10
  • 打赏
  • 举报
回复
m_mmscomm=new CMmscomm; 这是一个与原来无关的 新的 对象, 如果 m_mmscomm 已经 创建 成功,就不要这句!
weixin_40188149 2017-11-10
  • 打赏
  • 举报
回复
引用
https://wenku.baidu.com/view/c3a8fa136c175f0e7cd13722.html
如果采用其中方法二单线程中的串口通信,感觉是重写串口通信类,而不是基于MSCOMM基础上
weixin_40188149 2017-11-10
  • 打赏
  • 举报
回复
引用
发消息到CDataviewDlg让他自己调用
也就是我在CMeasureDlg按钮事件触发发送消息至CDataviewDlg, 然后在CDataviewDlg中调用MSCOMM控件吗?
向立天 2017-11-10
  • 打赏
  • 举报
回复
发消息到CDataviewDlg让他自己调用

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧