原贴链接:
http://www.daxia.com:81/bw/black/rs232/232comm.htm基于VC的MSCOMM串口程序
作者:电子白菜(2004-10-24)
这里提供的程序是《VC++串口通信技术与工程实践》一书上例子,如果你有这本书和它的配套光盘,那么大可不必下载。
MSCOMM不是工具控件,所以使用的时候要添加,具体就是Project->Add To Project->Commponents and Controls 然后你在一堆ActiveX中找到Miscrosoft Communications Control,Version 6.0 添加上去就是了,如果你的工程是个对话框的话,就回在对话框上多出个电话符号咯。不过这个电话符号是不会在实际应用中出现的
插入后,就会有个CMSComm的类提供声明对象了,例如声明:
CMSComm m_Com;
那么之后你就可以利用这个m_Com对象在实现你的串口通信,
例如:
m_Com.SetCommPort(1); //选择COM1
m_Com.SetInBufferSize(1024); //设置输入缓冲大小
m_Com.SetOutBufferSize(1024); //设置输出缓冲区大小
对于写串口,也就是PC发数据,一般我们用m_Com.SetOutput(xxx);
话说MSCOMM中有个变量很难懂,就是VARIANT,一般我们是不需要明白这个东东的内在的,发数据的时候就使用函数
COleVariant(xxx)转换下就可以了.
至于收,MSCOMM是采用事件的,
BEGIN_EVENTSINK_MAP(CCommWizardDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CCommWizardDlg)
ON_EVENT(CCommWizardDlg, IDC_COMMCTRL, 1 , OnOnCommCommctrl, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
CCommWizardDlg:你的DLG的名字,如果是个窗体,那就是窗体的名字。
CDialog:因为在DLG上响应的,所以是CDialog类,如果是窗体,就用CframWnd等的东西
IDC_COMMCTRL:刚才说的那个电话的ID,不喜欢这个名字你可以改的
OnOnCommCommctrl:事件响应函数,就是有串口事件的时候就会自动运行这个函数咯
其他东西你照抄就是咯,还有附带说明一下,其实ON_EVENT是个宏来的。
之后嘛,有任何串口事件出现,都会调用这个OnOnCommCommctrl函数的,包括收和发,所以在进入这个函数的时候你得先判断是什么事件,可以通过GetCommEvent()函数知道的,一般我们用事件就是为了收数据的,收数据的事件号是2,也就是你判断GetCommEvent()==2的话就是有数据来了,之后?就是GetInput咯.
说了不少废话了,来个可以用的吧,这东西是书上光盘附带的:
MSCOMM
顺带提一下,当你添加了MSCOMM的时候,工程中就会多出个mscomm的类,有时间可以研究研究一下这个类的:)
[p:1]