VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
LONG length;

BYTE rxdata[2000];
CString strtemp;
if(m_CtrlCom.GetCommEvent() == 2)
{

variant_inp = m_CtrlCom.GetInput();//每次这步执行完就退出了。
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for(k = 0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++)
{
BYTE bt = *(char*)(rxdata+k);

if(m_ctrlDisplay.GetCheck())
strtemp.Format("%+2x ",bt);
else
strtemp.Format("%c",bt);
length = strtemp.GetLength();


m_RXDATA += strtemp;
m_RXBYTE += length;
}
}
而程序在我的其它通讯实验中没有问题。偏偏跟手机红外线连接时,能发。
但接收时有问题。如下:
at+cmgl(列表短信) 都没有问题。
但直接发送at<-却回收到不"ok",这时我单步执行时,到上面指出的那行代码就自动退出了。
VARIANT variant_inp;
COleSafeArray safearray_inp;这两个变量,我自己也不太清楚是怎么回事,是不是它们惹的祸?我曾找了一个其它人写的串口调试工具,却能收到“ok”,

解决方案 »

  1.   

    试试下面的代码
     VARIANT vResponse;
    char *str;
    char *str1;
        int k, nEvent, i;
       
        nEvent = m_Com.GetCommEvent();    switch(nEvent)
    {
    case 2:  //收到大于RTHresshold个字符
    k = m_Com.GetInBufferCount(); //接收到的字符数目

    if(k > 0)
    {
    vResponse=m_Com.GetInput(); //read
    //对数据进行其他处理 
               str = (char*)(unsigned char*) vResponse.parray->pvData;
       //MessageBox("数据已接受!");
    }    
    // 接收到字符,MSComm控件发送事件
    i = 0;
    str1 = str;
    while (i < k)
    {
    i++;
    str1++;
    }
    *str1 = '\0';
    m_strReceive = (const char *)str;
    //清除字符串中的不必要字符
    break;
    case 3:  //CTS线状态发生了变化
    break;
    case 4:  //DSR线状态发生了变化
    break;
    case 5:  //CD线状态发生了变化
    break;
    case 6:  //Ring Indicator发生变化
    break;
        }     UpdateData(FALSE);
      

  2.   

    还是不行,
    m_CtrlCom.GetInput();这步还是有问题。好像就不能收。到这就退出了
      

  3.   

    曾经有几位兄弟不是解决过吗?是怎么回事啊?
    我也加上SetRTSEnable(TRUE),还是不行。
      

  4.   

    m_CtrlCom是个什么鸟?
    自己写的类??
    按f11跟入input(),看看到底出在哪一行啊?老兄!!!!!
      

  5.   

    三角星都多一个了,还解决不了这个问题,哎!!!
    楼上兄弟,那个当然是MSComm了
      

  6.   

    ActivX控件啊...
    退出了看看是什么提示啊.GetLastError()啊...
    光在这里瞎猜有什么用啊...
    得看提示..