void fsend(unsigned char  *pt,int cnt)
{
CMSComm m_mscomm;
CByteArray bytOutArr;
COleVariant varOut;

//CMSComm *pMSComm = (CMSComm *)pDlg->GetDlgItem(IDC_MSCOMM1);
while (cnt--)
{
bytOutArr.Add(*pt);
//varOut=COleVariant(bytOutArr);
//while (rs_out(*pt) == -1);
m_mscomm.SetOutput(COleVariant(bytOutArr));// 这一行为什么报错执行一次可以,执行下个数组出错.
pt++;
}

}

解决方案 »

  1.   

    void fsend(unsigned char  *pt,int cnt) 

        CMSComm m_mscomm; // 这个应该是乘员变量吧,或者说还有打开端口等其他操作
        CByteArray bytOutArr;     while (cnt--) 
        {
            bytOutArr.Add(*pt); 
            pt++; 
        }
        m_mscomm.SetOutput(COleVariant(bytOutArr));// 发送一次就可以了
    }另外从效率考虑也可以这样复制
    void fsend(unsigned char  *pt,int cnt) 

        CMSComm m_mscomm; // 这个应该是乘员变量吧,或者说还有打开端口等其他操作
        CByteArray bytOutArr;     bytOutArr.SetSize( cnt );
        memcpy( bytOutArr.GetData(), pt, cnt );
        m_mscomm.SetOutput(COleVariant(bytOutArr));// 发送一次就可以了
    }
    或者更简单:
    void fsend(unsigned char  *pt,int cnt) 

        CMSComm m_mscomm; // 这个应该是乘员变量吧,或者说还有打开端口等其他操作
        m_mscomm.SetOutput(COleVariant((LPCSTR)pt));// 发送一次就可以了
    }