无法从'ref object'转换为'tagVARIANT *'

时间:2014-06-13 15:47:28

标签: c# c++ wrapper command-line-interface variant

我在C ++ / CLI中有一个使用VARIANT *作为参数的方法。每当我在C#中调用该方法时,传递一个null对象作为VARIANT *参数,我就会遇到编译错误。

ERROR:

Argument #: cannot convert from 'ref object' to 'tagVARIANT*'

这是C ++ / CLI方法:

int foo::fooMethod( VARIANT* varFoo)
{
...
return 1
}

C#代码(引用C ++ DLL):

foo test = new foo();
object objFoo;
int iRet = foo.fooMethod( ref objFoo );

1 个答案:

答案 0 :(得分:3)

从System :: Object ^到COM Automation VARIANT的转换只有在让CLR调用COM接口方法时才会自动进行。看到它出现在本机代码中是相当不寻常的,请确保您没有绕过正常的COM互操作选项。可以从C#或VB.NET代码中轻松使用,只需添加对类型库的引用。

只需将参数声明为Object^即可。如果确实需要VARIANT,那么您可以从Marshal::GetNativeVariantForObject()获得一个。