c# - 无法从 'ref object' 转换为 'tagVARIANT*'

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

我在 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/

相关文章:

c# - 错误运算符 '=='无法应用于 'char'和 'string'类型的操作数

c++ - 如何使用 WASAPI 在 C++ UWP 应用程序上捕获音频?

c++ - 为静态链接构建 Boost (MinGW)

C# DLL 的包装器

python - 用JSON数据包装python类,哪个更好?

python-3.x - 了解这个 Python 装饰器是如何工作的

c# - 合并两个 SQLite 数据库文件 (C# .NET)

c# - 在 C3 中检测全局键盘钩子(Hook)

C# 对 datagridview 行中的相同值进行着色

c++ - 如何用两点和步骤c++之间的元素初始化 vector