在用mscomm控件实现串口通信时,我在头文件中定义了一个数组int a[20]。然后在构造函数中对这个数组初始化。在OnComm中一个一个调用这个数组时却不是这个数组中的数,传出的是:-842150451。但是传整数时却可以。这是怎么回事?如果要调用这个OnComm事件外的数组a[20]该如何做?

解决方案 »

  1.   

    肯定是代码有问题。把相关代码帖出来。如何定义的,如何初始化的,OnComm中如何调用的都贴出来。
      

  2.   

    我是这样写的
    头文件:
    public:
    CMSComm m_MSComm;
    int m_nIndex;
    int a[100];
    virtual ~CSdmsView();
    构造函数:
    CSdmsView::CSdmsView()
    {
    // TODO: add construction code here
      m_nIndex=1;
      int i;
      int I=0;
      int a[100]={0};
      int num[2]={0}; srand((unsigned)time(NULL)); for(i=1;i<=100;i++)
     {
      if(i%100)
      {
       if(num[1]<(27+(((i%400)<=100&&(i%400!=0))?0:1)))
       {   
        if(!a[I=(rand()%100)+(i/100)*100])
        {
         a[I]=35;
         ++num[1];
        }
        else
        {
         i--;
         continue;
        }  
       }
      }
      else
      {
       num[1]=0;
       continue;
      }
     }
     
     for(i=1;i<=100;i++)
     {
      if(i%100)
      {
       if(num[2]<10)
       {
        if(!a[I=(rand()%100)+(i/100)*100])
        {
         flag[I]=45;
         ++num[2];
        }
        else
        {
         i--;
         continue;
        }
       }
      }
    }
    OnComm响应函数:
    void CSdmsView::OnComm()
    {
    VARIANT variant_inp;
        COleSafeArray safearray_inp;
        LONG len,k;
        BYTE rxdata[2048]; 
        CString strtemp;
        CString strDisp;if(m_MSComm.GetCommEvent()==2) 
        {           
            variant_inp=m_MSComm.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); 
                strtemp.Format("%c",bt); 
                
            }
    if(strtemp=="1")
    {
        strDisp.Format("%d",a[m_nIndex]);
        m_nIndex++;
        m_MSComm.SetOutput(COleVariant(strDisp));
    }
    }
    }
      

  3.   

    CSdmsView::CSdmsView()

    int a[100]={0};
    }
    a[100]重复定义,所以函数里对a[100]的赋值并没有赋值到成员变量的a[100]中
      

  4.   

    int a[100]={0};--->  for (int i = 0; i < 100; i++)
          a[i] = 0;
      

  5.   

    把构造函数里面:int a[100]={0};
    改成
     for (int i = 0; i < 100; i++)
          a[i] = 0;
      

  6.   

    int a[100]={0};--->
    memset(&a,0,sizeof(a));