研究了好几天,终于研究出怎么用了,实践出书上的代码不彻底正确,甚至不少都是错的,总结以下: 编程
网上下载这个控件,而后把它拷贝到到C:\Windows\system32文件夹下,我装的是64位的Win7系 统,是在C:\Windows\sysWOW64文件夹下,而后打开cmd,写入代码 regsvr32 C:\Windows\system32\MSComm32.ocx而后按enter会提示你注册成功 数组
打开工具箱->右键选择选择项,等待一会会出现选择工具箱项,在COM组件下找到Microsoft communications control中的MSComm32.ocx项,勾选后添加,成功后在工具箱中就多了这么一个空间图标,能够拖进对话框中使用。 工具
功能是实现串口发送出"Hello World!",串口实现自动接受串口数据。VC++编程,新建个对话框工程,而后添加"打开串口","关闭串口","发送数据","清空数据"等按钮, 接受数据能够自动实现就不用添加了,加入一个编辑框用来显示接收到的串口数据。下面具体实现这几个功能编程: spa
在对话框中拖入这个控件,右键添加事件处理,在里面编程以下: 指针
void CtestDlg::OnCommMscomm1() //CtestDlg是我对话框项目实现文件中定义的类 orm
{ 事件
VARIANT input1;
BYTE rxdata[2048];
long len1,k;
COleSafeArray safearray1;
int iLineNum=m_Edit1.GetLineCount();
CString strDis,strTemp;
// short e=m_Com.get_CommEvent();
if(iLineNum < 24)
{
switch (m_Com.get_CommEvent()) //响应事件
{
case 2: //当达到阈值字符时候处理
input1 = m_Com.get_Input();
safearray1 = input1;
len1 = safearray1.GetOneDimSize(); //返回一维参数的长度
for(k = 0;k < len1;k ++)
safearray1.GetElement(&k,rxdata + k);//第一个参数是开始的数组指针,第二个是存放的数组指针
for(k = 0;k < len1;k ++)
{ get
strTemp.Format("%02X-",rxdata[k]); //十六进制显示
strDis += strTemp;
m_Edit1.ReplaceSel(strDis);
strDis = "";
UpdateData(false);
} input
else
{
m_Edit1.SetSel(0, -1);
m_Edit1.Clear();
} cmd
}
void CtestDlg::OnBnClickedOpencom()
{
// TODO: 在此添加控件通知处理程序代码
DWORD style = WS_VISIBLE | WS_CHILD;
m_Com.put_CommPort(1);
m_Com.put_Settings("9600,O,8,1");
m_Com.put_InBufferSize(1024);
m_Com.put_InBufferCount(0);
m_Com.put_InputMode(1);
m_Com.put_InputLen(0);
m_Com.put_RThreshold(1);
m_Com.put_PortOpen(1);
AfxMessageBox("串口打开成功!");
m_Opencom.EnableWindow(FALSE);
m_Closecom.EnableWindow(TRUE);
m_Edit1.EnableWindow(TRUE);
}
void CtestDlg::OnBnClickedClosecom()
{
// TODO: 在此添加控件通知处理程序代码
m_Com.put_PortOpen(0);
AfxMessageBox("关闭串口成功!");
m_Opencom.EnableWindow(TRUE);
m_Closecom.EnableWindow(FALSE);
m_Edit1.EnableWindow(TRUE);
}
void CtestDlg::OnBnClickedSenddata()
{
// TODO: 在此添加控件通知处理程序代码
CString aa;
aa = "Hello Word!!";
m_Com.put_Output(COleVariant(aa));
}
void CtestDlg::OnBnClickedClear() { // TODO: 在此添加控件通知处理程序代码 m_Edit1.SetSel(0, -1); m_Edit1.Clear(); UpdateData(false); }