在使用 VariantCopy 方法时,我遇到以下编译错误:
error C2664: 'VariantCopy' : cannot convert parameter 2 from 'const VARIANT *' to 'VARIANTARG *'
有没有办法解决这个错误?我需要包含任何预处理器指令或库吗?
问题出在不同的 Windows SDK 中,方法不同,这就是我遇到问题的原因。
曾经的签名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));
}