int z[10][10];  for ( int i=0; i<9; i++)
  {
    for ( int j=0; i<9; i++)
    {
      z[i][j] = (i+j)/2 ;
    }
  }
现在需要传递Z给一个COM对象,如何将二维数组z转换成TVariant?

解决方案 »

  1.   

    (32) (6)为通讯控件IDC_MSComm1添加OnComm消息处理函数OnComm()
    (33)    void CSCommTestDlg::OnComm() 
    (34) {
    (35) VARIANT variant_inp;
    (36) COleSafeArray safearray_inp;
    (37) LONG len,k;
    (38) BYTE rxdata[2048]; //设置BYTE数组(8位无符号整数)
    (39) CString strtemp;
    (40) if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
    (41) {
    (42) variant_inp=m_ctrlComm.GetInput();//读缓冲区
    (43) safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
    (44) len=safearray_inp.GetOneDimSize(); //得到有效数据长度
    (45) for(k=0;k<len;k++)
    (46) safearray_inp.GetElement(&&k,rxdata+k);//转换为BYTE型数组
    (47) for(k=0;k<len;k++)//将数组转入存储区
    (48) {
    (49)    PLCData[k]=rxdata[k];
    (50) }
    (51) verfun(PLCData,16);//计算校验码
    (52) if(PLCData[15]==PLCData[16])
    (53) { //接收数据正确发送确认信号
    (54)   m_ctrlComm.SetOutput(COleVariant("K@"));
    (55)     //可以在下面自行加上对数据的处理
    (56) if(!m_quit)//如果没有结束信号则续传数据
    (57)   m_ctrlComm.SetOutput(COleVariant("C@"));
    (58)   else
    (59)   m_ctrlComm.SetOutput(COleVariant("Z@"));
    (60) }
    (61) else //接收数据出错要求重发数据
    (62) m_ctrlComm.SetOutput(COleVariant("R@"));
      

  2.   

    谢谢,可是我需要的是 TVariant 阿,和 Variant 还不一样呢.