gpt4 book ai didi

c# - 在 C# 中包装一个包含固定大小的 C 数组的结构

转载 作者:行者123 更新时间:2023-12-04 08:26:34 24 4
gpt4 key购买 nike

由于包含固定大小的无符号短数组的结构,我目前被困在包装一个我无法更改的库中,我似乎无法使用包装器生成器 SWIG 在 C# 中包装类似的东西。
我创建了一个简约的示例 swig 项目文件,其中包含重现我的问题所需的一切。

%module SwigExperimentWrapper

struct ImportantData
{
static const unsigned short arraySize = 33;
unsigned short someUShortArray[arraySize];
};
数组的结果类型并不令人满意。我期待着类似的东西
fixed ushort someUShortArray[arraySize];
在 C# 中,但我只得到一个 SWIGTYPE_p_unsigned_short 类型,这表明 SWIG 可能没有足够的信息来说明如何处理这个数组。请注意,如果我只定义没有结构的数组,则行为是相同的。
我怀疑我的解决方案需要一些类型图,但首先我需要了解,为什么它不会生成符合我期望的东西。我觉得,我错过了一些东西,但我之前在 SWIG 上遇到过这样的问题,而且这些问题似乎更相关。
我很感激任何类型的输入,因为我无法在各种搜索中找到任何内容。

最佳答案

这种含义中的 fixed 关键字仅在组合结构时有用

internal unsafe struct Buffer
{
public fixed char fixedBuffer[128];
}
这定义了嵌入在结构中的数组,而不是引用的数组变量。
当然,这必须是固定大小,以在编译时定义结构的大小。
此样本取自此处。
https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/unsafe-code-pointers/fixed-size-buffers
使用 StructLayout 属性,您可以控制结构的某个成员必须从哪个字节开始,它们甚至可以重叠。因此,您可以生成任何您喜欢的内容,将任何按字节定义的记录映射到 C# 结构。
我不知道你的 swig 工具。
此解决方案需要不安全的代码。 (只是一个关键字,不用担心)
一种较旧的字符方法是这样的:
struct Foo
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=123)]
public char[] chars;
}

关于c# - 在 C# 中包装一个包含固定大小的 C 数组的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65234523/

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