可视化 C++ - 从'long'转换为"VARTYPE",可能会丢失数据



在将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: 'argument':从'long'转换为'VARTYPE',可能会丢失数据

代码片段:

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;
}

VARTYPE为16位。

typedef unsigned short VARTYPE;

为了消除警告,你应该使用旧式的C强制转换,或者最好使用c++ static_cast

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

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

相关内容

  • 没有找到相关文章

最新更新