1.假如妳現在正在學習VC串口編程,建議妳安裝壹個虛擬串口軟件vspdxp.exe
2.我自己寫了個程序實現妳的要求,vc6下測試通過,工程下載地址:/site/qiujiejia1/Home/BaiDu_Answer_VCSERIAL_1.zip
3.以下是部分代碼,僅供參考。
/****************************************************************************
初始化串口
****************************************************************************/
BOOL CCommTest::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
//Initial COM
m_ctrlComm.SetCommPort(1); //選擇com1
m_ctrlComm.SetSettings("9600,n,8,1"); //通信參數設置 波特率9600,無校驗,8個數據位,1個停止位
m_ctrlComm.SetInBufferSize(1024); //指定接收緩沖區大小
m_ctrlComm.SetRThreshold(1); //參數1表示每當串口接收緩沖區中有多於或等於1個字符時將引發壹個接收數據的OnComm事件
m_ctrlComm.SetInputMode(1); //定義Input屬性獲取數據的方式(為0:文本方式;為1:二進制方式)。
m_ctrlComm.SetInputLen(0); //設置每次Input讀入的字符個數,缺省值為0,表明讀取接收緩沖 區中的全部內容。
m_ctrlComm.SetInBufferCount(0); //清空接收緩沖區
m_ctrlComm.SetPortOpen(TRUE); //打開串口
return TRUE; // return TRUE unless you set the focus to a control
}
/****************************************************************************
接收函數 。
****************************************************************************/
void CCommTest::OnComm()
{
char Rec_Data_Array[2048]; //用於接受數據
if (m_ctrlComm.GetCommEvent() == 2) //事件值為2表示接收緩沖區內有字符
{
VARIANT ReceiveData = m_ctrlComm.GetInput(); //獲取數據
int Data_Len = ReceiveData.parray->rgsabound->cElements; //取出壹維的數據個數
memcpy(Rec_Data_Array, (char*) ReceiveData.parray->pvData, Data_Len); //拷貝出數據
Rec_Data_Array[Data_Len] = 0;
}
// ::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_RXDATA),(Rec_Data_Array+5)); //在edit框裏輸出全部字符
::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_RXDATA),(Rec_Data_Array+5)); //(Rec_Data_Array+5)即表示從第六個字符(即6)開始輸出
}
/****************************************************************************
發送函數
****************************************************************************/
void CCommTest::OnTransmit()
{
char buf[100]={0};
::GetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_TXDATA),buf,sizeof(buf));
m_ctrlComm.SetOutput(COleVariant(buf));//發送數據
}