2010-04-12 145 views
2

我對C++/CLI知之甚少,但我有一個簡單的問題需要解決方案。我有一個將字節數組作爲參數的C++/CLI類方法。該數組具有預定義的長度,並且可以事先在C#中分配。該陣列應該用C++/CLI方法填充數據。將C#中的數組參數傳遞給C++/CLI方法

如何聲明該方法,然後從C#調用它?

我試過的東西喜歡有我的C++/CLI類以下內容:

public ref class C 
{ 
public: 
    void FillBytes(array<BYTE^>^ bytes); 
}; 

,然後在C#:

o = new C(); 
var bytes = new byte[3]; 
o.FillBytes(bytes); 

但是這並沒有在所有:)工作。

+0

當我編寫'array ^'而不是'array ^' – jco 2010-04-12 17:43:25

回答

9

您是否嘗試過使用byte而不是BOOL參考?

void FillBytes(array<System::Byte>^ bytes); 
           ↑ 
          // no^here 
+0

我剛剛犯了一個錯字,我只是輸入了一些我的實際代碼的簡化版本,並且輸入了錯字。但問題依然存在。我得到「參數'1':當試圖編譯上述代碼時,無法從'byte []'轉換爲'System.ValueType []'」。 – jco 2010-04-12 17:42:04

+2

代碼中仍然有一個多餘的'^'。 – dtb 2010-04-12 17:44:09

6

我知道這個問題很久以前就被問過了,但希望它能幫助檢查這篇文章的其他人。從C++/CLI中,您需要發送這樣的:

void FillBytes(array<unsigned char>^% bytes); 

的「帽子」意味着它的一個CLR類型和%意味着你將通過參考,因此,C++/CLI填充陣列傳遞。

然後你就可以從C#這樣稱呼它:

o = new C(); 
var bytes = new byte[3]; 
o.FillBytes(ref bytes); 

希望它可以幫助別人!

+0

你會如何改變這個動態數組? – 2017-06-07 16:51:36