VARIANT vt;
vt.vt=VT_BSTR;
CString str=vt.pcVal;

解决方案 »

  1.   

    VARIANT 是应该没有办法传的你只有把他拆开来传
      

  2.   

    这是基础的COM编程, 去仔细看看文档:提示: 在MSDN中查SAFEARRAY Variant 或者再加howto,或string
      

  3.   

    //帮助函数
    inline int _UnicodeToANSI(LPCWSTR lpWStr,LPSTR lpszStr)
    {
      int iWStrLen;
      iWStrLen=::WideCharToMultiByte(CP_ACP,0,lpWStr,-1,lpszStr,0,NULL,NULL);
      if(lpszStr==NULL)
        return iWStrLen;
      return ::WideCharToMultiByte(CP_ACP,0,lpWStr,-1,lpszStr,iWStrLen,NULL,NULL);
    }//接口方法
    STDMETHODIMP CBATest1::AddStr(VARIANT vStr)
    {
      // TODO: Add your implementation code here  BSTR strData;
      long alIndex[2]={0,0};
      ::SafeArrayGetElement(vStr.parray,alIndex,&strData);
      char szTest[256];
      _UnicodeToANSI(LPCWSTR(strData),szTest);
      ::MessageBox(NULL,szTest,"Msg",MB_OK);
      return S_OK;
    }VB调用代码Dim aStr(1, 9) As String
    aStr(0, 0) = "ok"
    Dim obj As New BATESTLib.BATest1
    obj.AddStr (aStr)