将数组参数从 C# 传递到 C++/CLI 方法

发布于 2024-08-28 18:07:19 字数 406 浏览 6 评论 0原文

我对 C++/CLI 知之甚少,但我有一个简单的问题需要解决方案。我有一个 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);

但这根本不起作用:)。

I know only very little about C++/CLI, but I have a simple problem that needs a solution. I have a C++/CLI class method that takes a byte-array as a parameter. The array is of a pre-determined length, and can be allocated in C# beforehand. The array is supposed to be filled with data by the C++/CLI method.

How do I declare the method and then call it from C#?

I tried something like having the following in my C++/CLI class:

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

And then, in C#:

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

But that didn't work at all :).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

帅气称霸 2024-09-04 18:07:20

您是否尝试过使用 byte 而不是 BOOL 引用?

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

Have you tried using byte instead of a BOOL reference?

void FillBytes(array<System::Byte>^ bytes);
                                ↑
                           //   no ^ here
橘香 2024-09-04 18:07:19

我知道这个问题很久以前就被问过,但希望它能帮助其他正在检查这篇文章的人。从 C++/CLI 中,您需要发送以下内容:

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

“帽子”表示它是 CLR 类型,% 表示您将通过引用传递它,以便 C++/CLI 填充数组。

然后你可以像这样从 C# 调用它:

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

希望它对某人有帮助!

I know this question was asked a long time ago but hopefully it will help someone else who is checking this post. From C++/CLI you need to send this:

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

The "hat" means its a CLR type and the % means you will pass it by reference so that the C++/CLI fills the array.

Then you can call it from C# like this:

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

Hope it helps someone!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文