2010-04-12 180 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