Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从';参考对象';至';tagVARIANT*';_C#_C++_Wrapper_Command Line Interface_Variant - Fatal编程技术网

C# 无法从';参考对象';至';tagVARIANT*';

C# 无法从';参考对象';至';tagVARIANT*';,c#,c++,wrapper,command-line-interface,variant,C#,C++,Wrapper,Command Line Interface,Variant,我在C++/CLI中有一个使用VARIANT*作为参数的方法。每当我在C#中调用该方法,并将null对象作为VARIANT*参数传递时,就会出现编译错误 错误: 参数#:无法从'ref object'转换为'tagVARIANT*' 以下是C++/CLI方法: int foo::fooMethod( VARIANT* varFoo) { ... return 1 } C代码(引用C++ DLL): 只有在允许CLR调用COM接口方法时,从System::Object^到COM自动化变量的转

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

错误:

参数#:无法从'ref object'转换为'tagVARIANT*'
以下是C++/CLI方法:

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

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


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


只需将参数声明为
Object^
。如果您确实需要一个变体,那么您可以从中获取。

这是源代码的直接复制/粘贴吗?它在错误消息中提到了“ref object”,但您的示例代码没有使用“ref”关键字。这不是实际代码的复制/粘贴,很抱歉我忘记添加ref。嗨,Hans,谢谢您的回答。你能详细说明一下吗。“不绕过正常的COM互操作选项”是什么意思。对不起,我只是一个COM的新手。这真的需要从你解释为什么要写这段代码开始。我猜不到,fooMethod()的作用是完全看不见的。
foo test = new foo();
object objFoo;
int iRet = foo.fooMethod( ref objFoo );