2014-04-02 94 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
相關問題