【问题标题】:conversion from 'long' to 'VARTYPE', possible loss of data从“long”转换为“VARTYPE”,可能会丢失数据
【发布时间】:2014-03-14 10:11:55
【问题描述】:

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

警告 C4244:“=”:从“long”转换为“VARTYPE”,可能会丢失数据

代码片段:

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

警告 C4244:“argument”:从“long”转换为“VARTYPE”,可能会丢失数据

代码片段:

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

我无法修复此警告?..

【问题讨论】:

    标签: com visual-c++


    【解决方案1】:

    VARTYPE 是 16 位整数类型:

    WTYPES.H:typedef unsigned short VARTYPE;
    

    你会想要一个static_cast<VARTYPE>()

    【讨论】:

      猜你喜欢
      • 2014-04-19
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 2018-02-07
      • 2012-11-07
      相关资源
      最近更新 更多