2014-04-02 52 views
0

我有一个C++ dll(Cli)调用c#dll中的方法。如何将C++的ref参数传递给c#方法?

的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++代码是否有签名中的ref?

一个更queastion我有 - 在C#中我可以调用任何()方法对数组,但由于某种原因,这样做的C++/CLI不工作

if (reply->Any()) 

我得到一个错误:错误C2039 : '任何':不是 '系统::阵'

任何帮助,将appricated成员

THX

+0

C++/CLI在呼叫站点使用注释,您使用的代码是相同的。 Any()是一种扩展方法,在C++/CLI中不受支持。您必须显式调用Enumerable :: Any()。请每个帖子询问一个问题。 –

回答

0

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

+0

不是真的,因为我不能称之为myClass-> DoSomeWork(ref a,b); ref在C++/cli中不是有效的语法 – Dardar

0

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

1B)如ClassA是一类则ref是多余的反正。

2)关于if (reply->Any())检查你是否有在你的源代码:using namespace System::Linq;

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
相关问题