varAddress=(*pRs)->GetCollect(_variant_t("address"));
varAddress.ChangeType(VT_BSTR);
strAddress=varAddress.bstrVal;
//
typedef struct tagVARIANT  {
   VARTYPE vt;
   unsigned short wReserved1;
   unsigned short wReserved2;
   unsigned short wReserved3;
   union {
      Byte                    bVal;                 // VT_UI1.
      Short                   iVal;                 // VT_I2.
      long                    lVal;                 // VT_I4.
      float                   fltVal;               // VT_R4.
      double                  dblVal;               // VT_R8.
      VARIANT_BOOL            boolVal;              // VT_BOOL.
      SCODE                   scode;                // VT_ERROR.
      CY                      cyVal;                // VT_CY.
      DATE                    date;                 // VT_DATE.
      BSTR                    bstrVal;              // VT_BSTR.
      DECIMAL                 FAR* pdecVal          // VT_BYREF|VT_DECIMAL.
      IUnknown                FAR* punkVal;         // VT_UNKNOWN.
      IDispatch               FAR* pdispVal;        // VT_DISPATCH.
      SAFEARRAY               FAR* parray;          // VT_ARRAY|*.
      Byte                    FAR* pbVal;           // VT_BYREF|VT_UI1.
      short                   FAR* piVal;           // VT_BYREF|VT_I2.
      long                    FAR* plVal;           // VT_BYREF|VT_I4.
      float                   FAR* pfltVal;         // VT_BYREF|VT_R4.
      double                  FAR* pdblVal;         // VT_BYREF|VT_R8.
      VARIANT_BOOL            FAR* pboolVal;        // VT_BYREF|VT_BOOL.
      SCODE                   FAR* pscode;          // VT_BYREF|VT_ERROR.
      CY                      FAR* pcyVal;          // VT_BYREF|VT_CY.
      DATE                    FAR* pdate;           // VT_BYREF|VT_DATE.
      BSTR                    FAR* pbstrVal;        // VT_BYREF|VT_BSTR.
      IUnknown                FAR* FAR* ppunkVal;   // VT_BYREF|VT_UNKNOWN.
      IDispatch               FAR* FAR* ppdispVal;  // VT_BYREF|VT_DISPATCH.
      SAFEARRAY               FAR* FAR* pparray;    // VT_ARRAY|*.
      VARIANT                 FAR* pvarVal;         // VT_BYREF|VT_VARIANT.
      void                    FAR* byref;           // Generic ByRef.
      char                    cVal;                 // VT_I1.
      unsigned short          uiVal;                // VT_UI2.
      unsigned long           ulVal;                // VT_UI4.
      int                     intVal;               // VT_INT.
      unsigned int            uintVal;              // VT_UINT.
      char FAR *              pcVal;                // VT_BYREF|VT_I1.
      unsigned short FAR *    puiVal;               // VT_BYREF|VT_UI2.
      unsigned long FAR *     pulVal;               // VT_BYREF|VT_UI4.
      int FAR *               pintVal;              // VT_BYREF|VT_INT.
      unsigned int FAR *      puintVal;             //VT_BYREF|VT_UINT.
   };

解决方案 »

  1.   

    varAddress=(*pRs)->GetCollect(_variant_t("address"));
    varAddress.ChangeType(VT_BSTR);
    strAddress=varAddress.bstrVal;
    中pRs是什么意思?varAddress的类型?strAddress的类型?请您详细解答一下。谢谢!
      

  2.   

    呵呵,忘了,
    varAddress是VARIANT类型
    strAddress是CString类型
    (*pRs)->GetCollect(_variant_t("address"));//这个东东不用管了,主要是给varAddress赋了一个值.
      

  3.   

    我现在想给varAddress赋初值,你那一句怎么不管用呢?
    而且VARIANT没有ChangeTyep这个函数呀?
    再次请您解答,谢谢!
      

  4.   

    xt_jat(桑巴)的varAddress定义为_variant_t varAddress;
    如果VARIANT varAddress;可以使用VariantChangeType(...);
    一般varAddress = _variant_t(...);是可行的。
    或者
    varAddress.vt = VT_BSTR;
    varAddress.bstrVal = str.AllocSysString();//str defined as CString
      

  5.   

    VARIANT var1,var2;
    var1.vt=VT_I2;
    var1.iVal=6;
    var2.vt=VT_I2;
    var2.iVal=10;
    m_CCWGraphSensor.PlotXY(var1,var2);
    执行后发现"Array Dimension mismatch"的错误,到底怎么回事?
    谢谢!你有QQ吗?我在QQ上向您请教。
      

  6.   

    请你跟踪一下具体错误位置。
    我的测试代码OK!
    如下:
    void CClientDlg::TestVar(VARIANT& var1)
    {
    VariantChangeType(&var1, &var1, 0, VT_BSTR);
    CString str = var1.bstrVal;
    AfxMessageBox(str);
    }void CClientDlg::OnOK()
    {
    // TODO: Add your specialized code here and/or call the base class
    VARIANT var;
    var.vt = VT_I2;
    var.iVal = 100;
    TestVar(var);
    //CDialog::OnOK();
    }