《深入淺出VC++串口編程之第三方類》由會員分享,可在線閱讀,更多相關(guān)《深入淺出VC++串口編程之第三方類(3頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、/*
Comm Base Library(WIN98/NT/2000) ver
Compile by : BC++ 5; C++ BUILDER 4, 5, 6, X; VC++ 5, 6; ; GCC; copyright(c) - llbird */
#ifndef _CN_COMM_H_
#define _CN_COMM_H_
#pragma warning(disable: 4530)
#pragma warning(disable: 4786)
#pragma warning(disable: 4800)
#include <>
#include <>
#incl
2、ude <>
.)
{
if (!IsOpen())
return 0;
va_list va;
va_start(va, szFormat);
_vsnprintf(szBuffer, dwBufferLength, szFormat, va);
va_end(va);
return Write(szBuffer);
}
.)
{
if (!IsOpen())
return 0;
va_list va;
va_start(va, szFormat);
vsprintf(szBuffer, szFormat, va);
va_end(va);
return
3、 Write(szBuffer);
}
\COM");
ltoa(_dwPort, p, 10);
strcat(_szCommStr, p);
}
程序的功能和界面(如下圖)都與本文連載三、四中《 基于WIN32API的用 口編程》和《基于控件的串口編程》相同,不同的只是本節(jié)的串口通信要以llbird 定義的cnComril來實(shí)現(xiàn)。
我們需要為串口的接收事件定義一個用戶消息 ON_COM_RECEJVE止匕對話 框的消息映射為:
BEGIN_MESSAGE_MAP(CSerialPortClassDlg, CDialog)
."menu item to system men
4、u.
ASSERT((IDM_ABOUTBOX &0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu *pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
(IDS_ABOUTBOX);
if (!())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu)
5、;
}
}
The framework does this automatically
// when the applications main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
(1); //打開用口 1并使用默認(rèn)設(shè)置
(AfxGetMainWnd()->m_hWnd); // 設(shè)置消息處理窗 口
return TRU
6、E;// return TRUEunless you set the focus to a control }
發(fā)送字符串的過程很簡單,只需要調(diào)用 cnComrft的Write函數(shù):
//"發(fā)送”按鈕函數(shù)(完成數(shù)據(jù)的發(fā)送功能)
void CSerialPortClassDlg二OnSendButton()
{
// TODO: Add your control notification handler code here UpdateData(true);
(m_send);//發(fā)送字符串
}
接收字符串的過程也很簡單,只需要調(diào)用 cnComrmt的ReadString函數(shù):
7、
void CSerialPortClassDlg::OnCommRecv(WPARAM wParam, LPARAM lParam)
{
UpdateData(true);
//讀取用口上的字符
char str[100];
(str, 100);
m_recv += str;
UpdateData(false);
}
讀者朋友們這時一定會發(fā)出感慨:使用 cnComrft后,進(jìn)行串口數(shù)據(jù)收發(fā)的 程序是多么簡單??!的確,串口的初始化、讀寫幾乎都是用 1~2條語句搞定的!
這就是我們要特別用一次連載來講述使用第三方類來進(jìn)行串口通信的原因
實(shí)際上,筆者在進(jìn)行網(wǎng)絡(luò)通信程序編程時,也不認(rèn)為 MSI供的CSocket類是最
方便的選擇, 照樣習(xí)慣使用第三方的網(wǎng)絡(luò)通信類。 它們的確有非常簡潔明快的接
口,這一點(diǎn)也是值得MS哥哥們學(xué)習(xí)的。