error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'const int' (or there is no acceptable conversion)STDMETHODIMP CNiceCLSAPI::CapiGetConStatus(VARIANT *isConnect, long *nRetCode)
{
MyBOOL isConnected = FALSE;
MyBOOL isEvConnected = FALSE; try
{
*nRetCode = clsConnectionStatus ( &isConnected, &isEvConnected );
if( *nRetCode == CLS_RC_SUCCESS )
{
*isConnect = isConnected;//此行出错
}
return S_OK;
}
catch(...)
{
*nRetCode = CLS_RC_GENERAL_FAILURE;
return S_FALSE;
}
}

解决方案 »

  1.   

    struct tagVARIANT {
     VARTYPE vt;
     union {
      short iVal; // VT_I2.
      long lVal; // VT_I4.
      float fltVal; // VT_R4.
      double dblVal; // VT_R8.
      DATE date; // VT_DATE.
      BSTR bstrVal; // VT_BSTR.
      …
      short * piVal; // VT_BYREF|VT_I2.
      long * plVal; // VT_BYREF|VT_I4.
      float * pfltVal; // VT_BYREF|VT_R4.
      double * pdblVal; // VT_BYREF|VT_R8.
      DATE * pdate; // VT_BYREF|VT_DATE.
      BSTR * pbstrVal; // VT_BYREF|VT_BSTR.
     };
    };   显然,VARIANT类型是一个C结构,它包含了一个类型成员vt、一些保留字节以及一个大的union类型。例如,如果vt为VT_I2,那么我们可以从iVal中读出VARIANT的值。同样,当给一个VARIANT变量赋值时,也要先指明其类型。例如:VARIANT va;
    :: VariantInit(&va); // 初始化
    int a = 2002;
    va.vt = VT_I4; // 指明long数据类型
    va.lVal = a; // 赋值   为了方便处理VARIANT类型的变量,Windows还提供了这样一些非常有用的函数:  VariantInit —— 将变量初始化为VT_EMPTY;  VariantClear —— 消除并初始化VARIANT;  VariantChangeType —— 改变VARIANT的类型;  VariantCopy —— 释放与目标VARIANT相连的内存并复制源VARIANT。