错误C2664:'VariantCopy':无法将参数2从'const VARIANT *'转换为'VARIANTARG *'

时间:2012-08-22 11:29:07

标签: c++ atl

在使用VariantCopy方法时,我遇到了以下编译错误:

error C2664: 'VariantCopy' : cannot convert parameter 2 from 'const VARIANT *' to 'VARIANTARG *'

有没有办法解决这个错误?我是否需要包含任何预处理程序指令或库?

2 个答案:

答案 0 :(得分:1)

问题出在不同的Windows SDK中,方法不同,这就是我遇到问题的原因。

答案 1 :(得分:0)

VariantCopy的签名曾经是

HRESULT VariantCopy( 
  VARIANTARG FAR* pvargDest, 
  VARIANTARG FAR* pvargSrc 
); 

很奇怪,但是输入参数不是const,你应该在代码中注意这一点。

MSDN文档解释了原因。该函数可能会修改pvargSrc

  

如果pvargSrc是VT_DISPATCH或VT_UNKNOWN,则调用AddRef   增加对象的引用计数。

<强>更新

在最新的SDK中,第二个参数变为const。但是,我在MFC来源中发现了这一点:

static HRESULT copy(_Out_ VARIANT* p1, _In_ const VARIANT* p2) 
{
    p1->vt = VT_EMPTY; 
    return VariantCopy(p1, const_cast<VARIANT*>(p2));
}