错误 C2664:'VariantCopy':无法将参数 2 从 'const VARIANT *' 转换为 'VARIANTARG *'
error C2664: 'VariantCopy' : cannot convert parameter 2 from 'const VARIANT *' to 'VARIANTARG *'
在使用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));
}