如何将ref参数从c ++传递给c#方法?

时间:2014-04-02 07:38:26

标签: c++-cli managed-c++

我有一个c ++ dll(Cli)调用c#dll中的方法。

c#dll具有以下方法签名:

Class MyClass
{
   void DoSomeWork(ref ClassA a, ClassB b);
}

如果签名中有没有参考,我的代码是这样的:

MyClass^ myClass = gcnew MyClass();
ClassA a = gcnew ClassA();
ClassB b = gcnew ClassB();
myClass->DoSomeWork(a, b);

如果签名中有引用,我如何从c ++代码中调用它?

我还有一个问题 - 在c#中我可以在数组上调用Any()方法但由于某种原因这样做,c ++ / cli无法正常工作

if (reply->Any())

我收到错误:错误C2039:'任何' :不是' System :: Array'

的成员

任何帮助都会被批评

THX

3 个答案:

答案 0 :(得分:0)

如果你compile your C++ DLL as a Managed Assembly那么你应该可以像访问任何C#程序集一样访问它。

答案 1 :(得分:0)

1a)您可以使用:myClass->DoSomeWork(*a, b);

1b)如果ClassA是一个类,那么ref无论如何都是多余的。

2)关于if (reply->Any()),检查您的源代码中是否包含using namespace System::Linq;

答案 2 :(得分:0)

  1. 您无需执行任何操作即可在C ++ / CLI中传递ref个参数。 C#中的方法void DoSomeWork(ref ClassA a, ClassB b);在C ++ / CLI中被视为void DoSomeWork(ClassA^% a, ClassB^ b);。可以认为%与非托管C ++中的&等效:您不需要在方法调用中添加任何特殊内容以通过该方式传递参数。
  2. Any()是一种在Linq::Enumerable上定义的扩展方法。有关如何在C ++ / CLI中调用扩展方法,请参阅this answer