gpt4 book ai didi

c# - 如何编码可变大小的结构数组? C# 和 C++ 互操作帮助

转载 作者:可可西里 更新时间:2023-11-01 07:54:18 25 4
gpt4 key购买 nike

我有以下 C++ 结构

struct InnerStruct
{
int A;
int B;
};

struct OuterStruct
{
int numberStructs;
InnerStruct* innerStructs;
};

还有一个C++函数

OuterStruct getStructs();

我如何将其编码到 C#? C# 定义在哪里

struct OuterStruct {
InnerStruct[] innerStructs;
};

最佳答案

您必须手动执行此操作,因为无法告诉 P/Invoke 层要从 C++ 返回值中整理多少数据。

struct OuterStruct {
int numberStructs;
IntPtr innerStructs;
};

OuterStruct s = getStructs(); // using DllImport
var structSize = Marshal.SizeOf(typeof(InnerStruct));
var innerStructs = new List<InnerStruct>();
var ptr = s.innerStructs;

for (int i = 0; i < s.numberStructs; i++)
{
innerStructs.Add((InnerStruct)Marshal.PtrToStructure(ptr,
typeof(InnerStruct));
ptr = ptr + structSize;
}

请注意,如果您想从 C# 代码中释放 innerStructs 的内存,您必须在 C++ 代码中使用标准分配器 CoTaskMemAlloc——然后​​您可以调用 Marshal.CoTaskMemFree 释放 innerStructs

关于c# - 如何编码可变大小的结构数组? C# 和 C++ 互操作帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com