研究了好幾天,終於研究出怎麼用了,實踐出書上的代碼不徹底正確,甚至不少都是錯的,總結以下: 編程
網上下載這個控件,而後把它拷貝到到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); }