读书人

Debug Assertion Failed! 串口数采程序

发布时间: 2012-01-07 21:41:55 作者: rapoo

Debug Assertion Failed! 串口数采程序求助
一个串口数据采集程序,编译通过,运行出错,错误提示:
Debug Assertion Failed!
Program:.....
File: olevar.cpp
Line:2553

For information on how your program can cause an assertion failure,see....

File: olevar.cpp为是vc类库里的代码!!!

程序主要代码如下:

C/C++ code
/***Visual Basic 中的Val()函数改写***/double CHuoqvjiaoduDlg::Val(CString a){    int number=0;    CString *p;    int sum=0;    for(p=&a;*p!='\0';p++)    {        if(*p>='0'&&*p<='9')        {            if(number==0)            {                sum=(atoi(*p)-48);                number=1;            }            else                sum=(sum*10+(atoi(*p)-48));        }        else            break;    }    return sum;}/************主要函数****************/double CHuoqvjiaoduDlg::readGAM60Value(CString mingling){    int i,j,k;    //int d;    CString Buf("  ");    CString InByte("");    CString aa("");    //CString InByte;    CByteArray OutB;    //CString aa;    //CString    bb,cc;    double value;    m_MSComm1.SetPortOpen(TRUE);    m_MSComm1.SetInBufferCount(0);    m_MSComm1.SetOutBufferCount(0);    m_MSComm1.SetPortOpen(FALSE);    //Buf="";    Buf=mingling;    Buf.TrimLeft();    Buf.TrimRight();    i = strlen(Buf);    k = 0;    //free(&OutB);    //realloc(&OutB,(i/2)+1);    OutB.RemoveAll();    OutB.SetSize((i/2)+1);    j=0;    while(i>0)    {        OutB[j]=atoi(Buf.Mid(k,2));        k = k + 2;        i = i - 2;        j = j + 1;    }    /*COleVariant varOut;    varOut=(COleVariant)OutB; */    m_MSComm1.SetPortOpen(TRUE);    m_MSComm1.SetInBufferCount(0);    //m_MSComm1.SetOutput(varOut);    //m_MSComm1.SetOutput(COleVariant(OutB));    /*d = 0;    while(d<9000000)        d=d+1;*/    m_MSComm1.SetOutput(COleVariant(OutB));    //InByte=(CString)m_MSComm1.GetInput();    VARIANT   variant_inp;    COleSafeArray   safearray_inp;    LONG   len,z=0;    BYTE   rxdata[2048];    variant_inp=m_MSComm1.GetInput();    safearray_inp=(COleSafeArray)variant_inp;    len=safearray_inp.GetOneDimSize();    for(z=0;z<len;z++)        safearray_inp.GetElement(&z,rxdata+z);    for(z=0;z<len;z++)    {        BYTE   bt=*(char*)(rxdata+z);        InByte.Format("%c",bt);    }    m_MSComm1.SetPortOpen(FALSE);    if((InByte.Mid(1,1)) == "+")    {        aa = InByte.Mid(2,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(2,1)) == "+")    {        aa = InByte.Mid(3,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(3,1)) == "+")    {        aa = InByte.Mid(4,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(4,1)) == "+")    {        aa = InByte.Mid(5,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(5,1)) == "+")    {        aa = InByte.Mid(6,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(6,1)) == "+")    {        aa = InByte.Mid(7,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(7,1)) == "+")    {        aa = InByte.Mid(8,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(8,1)) == "+")    {        aa = InByte.Mid(9,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(9,1)) == "+")    {        aa = InByte.Mid(10,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(10,1)) == "+")    {        aa = InByte.Mid(11,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(11,1)) == "+")    {        aa = InByte.Mid(12,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(12,1)) == "+")    {        aa = InByte.Mid(13,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(13,1)) == "+")    {        aa = InByte.Mid(14,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(14,1)) == "+")    {        aa = InByte.Mid(15,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(15,1)) == "+")    {        aa = InByte.Mid(16,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    if((InByte.Mid(16,1)) == "+")    {        aa = InByte.Mid(17,10);        value = Val(aa);        //return value * 0.01;        value=value * 0.01;    }    return value;}void CHuoqvjiaoduDlg::OnButnhq() {    // TODO: Add your control notification handler code here    double jiaodu;      char string[25];    int sig = 10; // significant digits     jiaodu = readGAM60Value("2330300D");    gcvt(jiaodu, sig, string);    m_nEdit=string;    UpdateData(FALSE);} 



[解决办法]
你出错的地方大概是这个函数吧,也就是说只要它是array,你就不能直接用=赋值。我看你很多SafeArray都是直接用=赋值的,所以出错
C/C++ code
COleSafeArray& COleSafeArray::operator=(const VARIANT& varSrc){    ASSERT(varSrc.vt & VT_ARRAY);    AfxCheckError(::VariantCopy(this, (LPVARIANT)&varSrc));    return *this;}
[解决办法]
说错了,它应该是必须是array,但是实际上并不是array。所以估计你得到的数据并不是array,而你当作safearray处理了
探讨
你出错的地方大概是这个函数吧,也就是说只要它是array,你就不能直接用=赋值。我看你很多SafeArray都是直接用=赋值的,所以出错
C/C++ code
COleSafeArray& COleSafeArray::operator=(const VARIANT& varSrc)
{
ASSERT(varSrc.vt& VT_ARRAY);

AfxCheckError(::VariantCopy(this, (LPVARIANT)&varSrc));return*this;
}

读书人网 >VC/MFC

热点推荐