Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 从';长';至';VARTYPE';,数据可能丢失_Visual C++_Com_Variant - Fatal编程技术网

Visual c++ 从';长';至';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

在将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
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
它的实际内容类型是什么?