我在 C++/CLI 中有一个使用 VARIANT* 作为参数的方法。每当我在 C# 中调用该方法并将空对象作为 VARIANT* 参数传递时,都会出现编译错误。
错误:
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 );
最佳答案
只有当您让 CLR 调用 COM 接口(interface)方法时,才会自动从 System::Object^ 转换为 COM 自动化 VARIANT。看到它出现在 native 代码中是相当不寻常的,请确保您没有绕过正常的 COM 互操作选项。只需添加对类型库的引用即可轻松地从 C# 或 VB.NET 代码中使用。
只需将参数声明为 Object^
即可。如果您确实需要一个VARIANT,那么您可以从 Marshal::GetNativeVariantForObject() 获取一个.
关于c# - 无法从 'ref object' 转换为 'tagVARIANT*',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24209319/