BOOL CMyCOMDlg::OnInitDialog()

{

CDialog:OnInitDialog();

//以上为MFC框架自动生成的代码,在此不列出

//TODO:Add extra initialization here

m_wndCOM1.SetCommPort(1);

m_wndCOM1.SetSettings(“9600,e,7,1”);

m_wndCOM1.SetRThreshold(1);

m_wndCOM1.SetSThreshold(0);

m_wndCOM1.SetInputLen(1);

m_wndCOM1.SetPortOpen(TRUE);//打开通信口

return TRUE;//return TRUE unless you set the focus to a control

}

接下来为程序主对话框建立响应MSComm事件的处理函数,每当MSComm控件触发事件时该函数将被调用。在对话框编辑器中用鼠标左键双击MSComm控件图标,在弹出的对话框中输入函数名OnCommCOM1,该事件处理函数的原型定义和消息映射入口将自动被添加到CMyCOMDlg类中,我们所要做的只是在OnCommCOM1函数中给出具体的数据处理程序段,代码示例如下:

void CMyCOMDlg::OnCommCom1()

{

//TOD O:Add your control notification handler code here

CString sInput;

switch(m_wndCOM1.GetCommEvent())

{

case 1: //comEvSend事件

/*如有数据要发送,可采用以下代码:

VARIANT varOut;

VariantInit(&varOut);

varOut.vt=VT_BSTR;

USES_CONVERSION;

varOut.bstrVal=SysAllocString(T2OLE)(“My data”));

if(varOut.bstrVal){

m_wndCOM1.SetOutput(varOut);

SysFreeString(varOut.bstrVal);

}

*/

break;

case 2: //comEvReceiv事件,有数据到达

sInput=m_wndCOM1.GetInput().bstrVal;

//对接收到的数据做必要处理

break;

case 1009://comEventRxParity事件,奇偶校验错误

//错误处理代码

break;

default:

break;

}

 

在这里必须注意的一点是在发送字符数据时,必须向MSComm控件提供Unicode格式的字符串,在以上代码中用到了USES_CONVERSION和T2OLE宏进行ANSI字符串到Unicode字符串的转换,具体内容可参考Visual C++6.0所带的MSDN文档,在此不加赘述。

本文对Windows 98下Visual C++ 程序中使用MSComm串行通信ActiveX控件编程的方法做了探讨,显示了ActiveX技术的强大功能、充分的灵活性和易用性,具有一定的实践意义。

责任编辑:gt

关于通信网络就介绍完了,您有什么想法可以联系小编。