gpt4 book ai didi

c# - 在保留结构的同时编码(marshal)它 "unmanaged"

转载 作者:行者123 更新时间:2023-11-30 14:31:03 26 4
gpt4 key购买 nike

我正在调用一个 DLL,该 DLL 返回一个 void** 结构指针列表,所有类型都相同。 From what I've read ,为了将我的结构从该列表中转换出来,该结构需要被视为非托管。我试图编码(marshal)的结构的主要罪魁祸首是来自 C 端的以下两个字段:

char name[1024];
int crop[4];

大多数指南建议在托管端的相应结构上使用 string 或 int[],但拥有这些字段会使其成为托管结构,因此无法从 void** 列表中提取。

还有什么方法可以整理这些字段,为我提供非托管结构?

最佳答案

如果您像这样声明它,该结构将在没有帮助或不需要 unsafe 关键字的情况下进行编码:

using System.Runtime.InteropServices;
...
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Example {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
public string name;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
int[] crop;
}

使用 Marshal.PtrToStructure() 将 void* 转换为结构体。

关于c# - 在保留结构的同时编码(marshal)它 "unmanaged",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2169255/

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