在使用VariantCopy方法时,我遇到了以下编译错误:
error C2664: 'VariantCopy' : cannot convert parameter 2 from 'const VARIANT *' to 'VARIANTARG *'
有没有办法解决这个错误?我是否需要包含任何预处理程序指令或库?
答案 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));
}