代码如下(很奇怪m_MSComm已经声明了,编译没错误,执行OnStart()的红色代码就有错误。):
#include "mscomm.h"CMSComm m_MSComm;
CString m_strBaudRate;
CComboBox m_COMPort;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CWeightDlg dialog
CWeightDlg::CWeightDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWeightDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWeightDlg)
m_strBaudRate = _T("9600");

// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CWeightDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWeightDlg)
DDX_Control(pDX, IDC_ADODC3, m_Adodc); 
    
//    DDX_Control(pDX, IDC_DATAGRID6, m_Datagrid1);
DDX_Control(pDX, IDC_DATAGRID4, m_Datagrid);
DDX_Text(pDX, IDC_BAUDRATE, m_strBaudRate);
DDX_Control(pDX, IDC_COMPORT, m_COMPort);
// DDX_Control(pDX, IDC_ADODC4, m_Adodc1); 
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWeightDlg, CDialog)
//{{AFX_MSG_MAP(CWeightDlg)
ON_BN_CLICKED(IDC_BUTTON12, OnQueryMainMaterial)
ON_BN_CLICKED(IDC_BUTTON2, OnStart)
ON_BN_CLICKED(IDC_BUTTON4, OnClose)// ON_EVENT(CWeightDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()void CWeightDlg::OnStart()
{
// TODO: Add your control notification handler code here     UpdateData(TRUE); switch(m_COMPort.GetCurSel())//选择串口号
{
case 0:
m_MSComm.SetCommPort(1); //选择COM1 break;
case 1:
m_MSComm.SetCommPort(2); //选择COM2 break;
case 2:
m_MSComm.SetCommPort(3); //选择COM3
break;
case 3:
m_MSComm.SetCommPort(4); //选择COM4 break;
default:
break;
}
GetDlgItem(IDC_COMPORT)->EnableWindow(FALSE); m_BaudRate = m_strBaudRate+",N,7,1"; //拼接波特率字 GetDlgItem(IDC_BAUDRATE)->EnableWindow(FALSE);
m_MSComm.SetInBufferSize(512); //接收缓冲区
m_MSComm.SetOutBufferSize(128);//发送缓冲区
m_MSComm.SetInputLen(0);//设置当前接收区数据长度为25字节
m_MSComm.SetInputMode(1);//以二进制方式读写数据
m_MSComm.SetRThreshold(1);//当接收缓冲区有25个字节时,将触发OnComm的消息2
m_MSComm.SetSettings(m_BaudRate);//设置波特率xxxx,无校验,8个数据位,1个停止位

if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开
{
m_MSComm.SetPortOpen(TRUE);//打开串口

GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE); //开始按钮变灰 }
else
AfxMessageBox("打开串口失败\n请检查设置"); m_MSComm.GetInput(); //先预读缓冲区以清除残留数据}