在写个画图软件,现在想通过串口将所作的图的数据发给下位机,目前我采用串口精灵进行数据调试,但我上位机发送数据时就出错了,是什么原因呢?我将我的代码贴在下面,高手给看下吧。 我的MSComm控件放在程序主对话框上,所以在view创建时创建的控件,下面是控件的初始化: 
int CDEMOView::OnCreate(LPCREATESTRUCT lpCreateStruct)  

if (CView::OnCreate(lpCreateStruct) == -1) 
return -1; // TODO: Add your specialized creation code here 
    m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM);//创建控件 
m_MSComm.SetCommPort(m_strComm);//选择COM 
//m_MSComm.SetCommPort(1); 
m_MSComm.SetInBufferSize(1024);//接收缓冲区大小 
m_MSComm.SetOutBufferSize(1024);//发送缓冲区大小 
m_MSComm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取 
m_MSComm.SetInputMode(0);//以文本格式(ASCII)取回数据 
m_MSComm.SetRThreshold(1);//表示一有数据就开始接收数据的OnComm件事 m_MSComm.SetSettings(m_strBaudRate + "," + CString(m_strParity) + "," + 
  m_strDataBits + "," + m_strStopBits);//设置波特率,校验位,数据位,停止位 
 //   m_MSComm.SetSettings("9600,N,8,1"); if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开 
        m_MSComm.SetPortOpen(TRUE);//打开串口 
else 
AfxMessageBox("串口未打开!");//打开失败弹出提示对话框 
m_MSComm.GetInput();//先预读缓冲区以清除残留数据 
return 0; 
} 我现在只要求发送数据,没涉及接收数据,那OnOnCommMscomm()是不是如下面写: 
void CDEMOView::OnOnCommMscomm()  

// TODO: Add your control notification handler code here 
VARIANT variant_inp; 
COleSafeArray safearray_inp; 
LONG len,k; 
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed. 
CString strtemp; 
if(m_MSComm.GetCommEvent()==2)     //事件值为2表示接收缓冲区内有字符 

variant_inp = m_MSComm.GetInput();   //读缓冲区 
safearray_inp = variant_inp;           //VARIANT型变量转换为ColeSafeArray型变量 
len=safearray_inp.GetOneDimSize(); //得到有效数据长度 
for(k=0;k <len;k++) 
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 
for(k=0;k <len;k++) 

BYTE bt=*(char*)(rxdata+k); 
strtemp.Format("%c",bt); 



下面是发送函数,其中data是一个数据结构的地址 
void CSerial::senddata(char* data, int len) 

    m_MSComm.SetOutput(COleVariant(data)); } 我进行调试的时候到发送数据这就出现问题了,无法执行,不知道程序中哪出问题了,请高手给看看,谢谢了!急!