我在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 );
答案 0 :(得分:3)
从System :: Object ^到COM Automation VARIANT的转换只有在让CLR调用COM接口方法时才会自动进行。看到它出现在本机代码中是相当不寻常的,请确保您没有绕过正常的COM互操作选项。可以从C#或VB.NET代码中轻松使用,只需添加对类型库的引用。
只需将参数声明为Object^
即可。如果确实需要VARIANT,那么您可以从Marshal::GetNativeVariantForObject()获得一个。