2012-08-22 54 views
-1

在使用VariantCopy方法,我遇到以下编译错误:错误C2664:“VariantCopy”:无法从“const变量*”转换参数2“VARIANTARG *”

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

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

+0

嗯,哪个源代码确实会产生这个错误? – Vlad

+0

:: VariantCopy(&variable1,&variable2);这两个参数都是VARIANT – dansc

+2

@MCD所以也许'variable1'是恒定的? – xaizek

回答

0

VariantCopy签名曾经是

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

令人奇怪的是,但输入参数不是const的,你应该知道的是,在你的代码。

MSDN文档解释了原因。该功能可能会修改pvargSrc

If pvargSrc is a VT_DISPATCH or VT_UNKNOWN, AddRef is called to increment the object's reference count.

更新

在最近的SDK,第二个参数成为const。然而,我发现这个在MFC来源:

static HRESULT copy(_Out_ VARIANT* p1, _In_ const VARIANT* p2) 
{ 
    p1->vt = VT_EMPTY; 
    return VariantCopy(p1, const_cast<VARIANT*>(p2)); 
} 
+0

似乎是一个Windows SDK问题。我的版本有:WINOLEAUTAPI VariantCopy(__ out VARIANTARG * pvargDest,__in const VARIANTARG * pvargSrc);在OleAuto.h中 – dansc

+0

@MCD:您是否有机会安装几个版本的SDK? – Andrey

+0

我使用v7.0,但在Program Files \ Microsoft SDKs \ Windows中有几个版本,从5.0到7.0A – dansc

1

的问题是在不同的Windows软件开发工具包的方法是不同的,这就是为什么我有这个问题。

相关问题