从' long'转换到了VARTYPE',可能会丢失数据

时间:2014-03-14 11:13:36

标签: visual-c++ com variant

在将VC ++ 6.0开发的代码迁移到Visual Studio 2008时,我收到了以下警告

  
    

警告C4244:' =' :来自' long'的转换到' VARTYPE',可能会丢失数据

  

代码段:

STDMETHODIMP CTextFileParser::FormatString(
     long lTargetType, BSTR szFormat, BSTR szInput, VARIANT *value)
{
   //blahblahblah
   CComVariant vErg(szSource.c_str()); // Definition of vErg
   vErg.vt = lTargetType; // <<<< C4244
  
    

警告C4244:&#39;参数&#39; :来自&#39; long&#39;的转换到&#39; VARTYPE&#39;,可能会丢失数据

  

代码段:

STDMETHODIMP CField::get_ContentWithType(long lType, VARIANT *pVal)
{
   HRESULT hRC;
   CComVariant oNewValue(m_content);           // Definition of oNewValue
   hRC = oNewValue.ChangeType(lType, NULL);    // <<<< C4244
   if (SUCCEEDED(hRC)) oNewValue.Detach(pVal);
   return hRC;
}

我无法修复此警告?..

1 个答案:

答案 0 :(得分:3)

VARTYPE是16位。

typedef unsigned short VARTYPE;

为了杀死警告,你应该使用旧式C cast或最好使用C ++ static_cast

vErg.vt = static_cast<VARTYPE>( lTargetType );

如果可以的话,更好但更复杂的解决方案是重构代码,传递VARTYPE个参数而不是long个。