-1

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

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

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

4

2 回答 2

1

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

于 2012-10-31T07:51:25.517 回答
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));
}
于 2012-08-22T11:50:45.267 回答