VS2015版本 在子对话框添加MSComm控件后,将子对话框show出来时,程序出现中断,崩溃了

醋绊柠檬 2019-10-31 04:53:41
...全文
300 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
子对话框添加MSComm控件后 1 MSComm控件 是不显示的 ! 2 dlg 初始化时, 暂不初始化 MSComm控件 试试
蒋晟 2019-11-08
  • 打赏
  • 举报
回复
AfxOleInit会调用OleInitiaize,之后再调用CoInitialize是没有效果的。
advance_coder 2019-11-08
  • 打赏
  • 举报
回复
引用了外部动态库的情况下,看外部动态库的安装路径,是否在系统变量path里面。可能是程序执行时无法找到外部dll。
醋绊柠檬 2019-11-05
  • 打赏
  • 举报
回复
引用 18 楼 蒋晟 的回复:
需要初始化MFC的ActiveX支持(AfxOleInit)并且系统上已经安装了MSComm。 另外这个控件没有64位版本。因为VS是32位所以你在设计的时候可以加,但是运行时会出错。
谢谢,找到了原因了。项目在创建的时候没有选择支持Active控件的选项,导致窗口初始化失败。在程序的入口函数 Instance()中添加了如下代码: AfxEnableControlContainer(); AfxOleInit(); //初始化控件 然后在创建代码中加入 ::CoInitialize(NULL); 和 ::CoUninitialize();用以初始化Com. 就能成功打开窗口了
醋绊柠檬 2019-11-05
  • 打赏
  • 举报
回复
引用 18 楼 蒋晟 的回复:
需要初始化MFC的ActiveX支持(AfxOleInit)并且系统上已经安装了MSComm。 另外这个控件没有64位版本。因为VS是32位所以你在设计的时候可以加,但是运行时会出错。
怎么解决这个问题呢,我用笔记本也是64位的可以使用,台式机就不能了。
蒋晟 2019-11-04
  • 打赏
  • 举报
回复
需要初始化MFC的ActiveX支持(AfxOleInit)并且系统上已经安装了MSComm。 另外这个控件没有64位版本。因为VS是32位所以你在设计的时候可以加,但是运行时会出错。
醋绊柠檬 2019-11-04
  • 打赏
  • 举报
回复
引用 16 楼 hhhh63 的回复:
有点麻烦,在每一个用数组的地方加上语句 ASSERT( i < len ),i是数组下标,len是数组长度。
不行,不是数组的原因。我将MSComm控件放在主对话框里,主对话框直接就闪退关闭了
hhhh63 2019-11-04
  • 打赏
  • 举报
回复
有点麻烦,在每一个用数组的地方加上语句 ASSERT( i < len ),i是数组下标,len是数组长度。
醋绊柠檬 2019-11-04
  • 打赏
  • 举报
回复
引用 14 楼 hhhh63 的回复:
应该是数组或指针超界了,不是MSComm的问题,只不过是MSComm中用到了破坏的内存。
感觉有点是像数组超界了,不知道怎么去定位越界的数组
hhhh63 2019-11-04
  • 打赏
  • 举报
回复
应该是数组或指针超界了,不是MSComm的问题,只不过是MSComm中用到了破坏的内存。
醋绊柠檬 2019-11-04
  • 打赏
  • 举报
回复
引用 11 楼 schlafenhamster 的回复:
子对话框初始化里添加了不初始化MSComm控件 看看你的 代码 ?
就是添加了你发的那个代码,还是一样没效果
醋绊柠檬 2019-11-04
  • 打赏
  • 举报
回复
引用 11 楼 schlafenhamster 的回复:
子对话框初始化里添加了不初始化MSComm控件 看看你的 代码 ?
schlafenhamster 2019-11-04
  • 打赏
  • 举报
回复
子对话框初始化里添加了不初始化MSComm控件
看看你的 代码 ?
醋绊柠檬 2019-11-04
  • 打赏
  • 举报
回复
引用 5 楼 zgl7903 的回复:
MSComm 是否正确注册?
正确注册了
醋绊柠檬 2019-11-04
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
子对话框添加MSComm控件后 1 MSComm控件 是不显示的 ! 2 dlg 初始化时, 暂不初始化 MSComm控件 试试
我在子对话框初始化里添加了不初始化MSComm控件,但是还是不行,还是一样会崩溃
schlafenhamster 2019-11-01
  • 打赏
  • 举报
回复
dlg 初始化中
// TODO: Add extra initialization here
// Create the MSCOMM32 OLE Control.
if (!m_MyMSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1))
{
TRACE0("Failed to create OLE Communications Control\n");
return -1; // fail to create
}

// Set RThreshold property to 1. The default RThreshold value (0)
// causes the OnComm event does NOT fire when a character is detected
// in the serial port.
// m_MyMSComm.SetOutBufferSize(4096);
m_MyMSComm.SetRThreshold(1);
m_MyMSComm.SetRTSEnable(TRUE);
走好每一步 2019-11-01
  • 打赏
  • 举报
回复
不推荐使用MSComm控件,使用CSerialPort吧,这个用了好多年了 https://download.csdn.net/download/tajon1226/11102637
zgl7903 2019-11-01
  • 打赏
  • 举报
回复
MSComm 是否正确注册?
schlafenhamster 2019-11-01
  • 打赏
  • 举报
回复
子对话框添加MSComm控件后
1 MSComm控件 是不显示的 !
2 dlg 初始化时, 暂不初始化 MSComm控件 试试
schlafenhamster 2019-11-01
  • 打赏
  • 举报
回复

void CUseMsComm32OCXDlg::OpenCom(int iCom)
{
m_MyMSComm.SetCommPort(iCom);
// HANDLE com_id=(HANDLE) m_MyMSComm.GetCommID();
// COMMTIMEOUTS CommTimeOuts;
// ZeroMemory(&CommTimeOuts,sizeof(CommTimeOuts));
// SetCommTimeouts(com_id,&CommTimeOuts);
// 9600 baud, no parity, 8 data, and 1 stop bit.
m_MyMSComm.SetSettings("9600,N,8,1");
// Use Binary
m_MyMSComm.SetInputMode(ComInputModeBinary);
// Tell the control to read entire buffer when Input is used.
m_MyMSComm.SetInputLen(0);
// Open the port.
m_MyMSComm.SetPortOpen(true);
m_MyMSComm.GetInput();

//
CString prompt;
prompt.Format("COM Settings: COM%d,9600,N,8,1",iCom);
m_ComSettings.SetWindowText(prompt);
}
//
加载更多回复(3)

3,248

社区成员

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

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