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

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

本文关键字:const VARIANT VARIANTARG 转换 VariantCopy C2664 参数 错误      更新时间:2023-10-16

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

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

有什么方法可以解决这个错误吗?我需要包含任何预处理器指令或库吗?

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

VariantCopy的签名曾经是

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

这很奇怪,但输入参数不是常量,您应该在代码中意识到这一点。

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