如何编组包含未知大小的 int 数组的结构?

Posted

技术标签:

【中文标题】如何编组包含未知大小的 int 数组的结构?【英文标题】:How do I marshal a structure containing a array of int of unknown size? 【发布时间】:2020-09-19 15:42:42 【问题描述】:

我有一个 c 结构,我想从 c 函数返回到 c#,并且该结构包含一个 int 数组和一个长度。所以基本上

struct MyStruct

int *arr;
int size;
 

我应该如何在 c 中分配 arr 以确保它可以在 c# 中释放。以及如何在c#中装饰相应的结构以使编组成为可能?

【问题讨论】:

要与 C# 互操作,您使用的是 C、C++、C++/CLI、C++/CX、C++ 与 WRL,还是 C++/WinRT?您使用的是 .NET 还是 Mono?您使用的是 Windows、Macintosh 还是 Linux? 我在 C# 中工作,我调用的库是 C++,但我只调用 C 风格的函数。我使用 Visual Studio 和 .NET 标准。 【参考方案1】:

你不能。 您应该通过相同的运行时库分配和释放内存。

【讨论】:

您可以在 C 代码中分配内存,在 C# 中使用它,并在 C 代码中释放内存(通过调用用户函数)。 谢谢,那我想我不需要进一步搜索了。我曾希望结构应该有类似 SizeParamIndex 的东西:docs.microsoft.com/en-us/dotnet/api/… @AndersG 是什么让您认为 SizeParamIndex 不适用于结构? 是否可以将其用于结构?怎么样?

以上是关于如何编组包含未知大小的 int 数组的结构?的主要内容,如果未能解决你的问题,请参考以下文章

包含字节数组的编组结构

如何填充包含未知大小的结构切片的结构[重复]

导出的 C 函数与结构与 .Net 编组中的布尔大小

如何在 C# 中编组结构数组?

如何将 C 指针编组到 C# 结构数组

将结构数组从 C#(.NET Core) 传递到 C++(未管理)