Visual c++ 从';长';至';VARTYPE';,数据可能丢失
在将VC++6.0开发的代码迁移到Visual studio 2008时,我收到了以下警告 警告C4244:“=”:从“long”转换为“VARTYPE”,可能会丢失数据 代码段:Visual c++ 从';长';至';VARTYPE';,数据可能丢失,visual-c++,com,variant,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(szSourc
STDMETHODIMP CTextFileParser::FormatString(
long lTargetType, BSTR szFormat, BSTR szInput, VARIANT *value)
{
//blahblahblah
CComVariant vErg(szSource.c_str()); // Definition of vErg
vErg.vt = lTargetType; // <<<< C4244
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;
}
STDMETHODIMP CTextFileParser::FormatString(
长目标类型,BSTR szFormat,BSTR szInput,变量*值)
{
//布拉布拉布拉赫
CComVariant vErg(szSource.c_str());//vErg的定义
vErg.vt=lTargetType;//VARTYPE
为16位
typedef unsigned short VARTYPE;
为避免警告,应使用旧的C型或最好的C++ >代码> STATICO-CAST
vErg.vt = static_cast<VARTYPE>( lTargetType );
vErg.vt=static_cast(lTargetType);
如果可以,一个更好但更复杂的解决方案是重构代码,传递VARTYPE
参数,而不是long
参数。@user3360310请确保始终传递适合16位的参数:-)第一个代码段似乎很可疑。为什么要从字符串中设置变量,然后在不使用cha的情况下更改其vt
它的实际内容类型是什么?