gpt4 book ai didi

c# - 编码(marshal)结构数组

转载 作者:行者123 更新时间:2023-11-30 16:20:49 27 4
gpt4 key购买 nike

我花了很多时间寻找解决方案,但还是没有找到。

我有两门课:

[StructLayout(LayoutKind.Sequential)]
public class Result
{
public int Number;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string Name;
public int Size;
}

[StructLayout(LayoutKind.Sequential)]
public class CoverObject
{
public int NumOfResults;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 4)]
public Result[] Results;
}

我期望命令 Marshal.SizeOf(typeof(CoverObject)) 将返回 52,但不是,它只是 20。因此,我稍后使用的所有 marshall 和 unmarshall 都不起作用。

看起来它只计算 Result 类中的第一个成员(Number)。我做错什么了吗?

最佳答案

将类更改为结构

[StructLayout(LayoutKind.Sequential)]
public struct Result
{
public int Number;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string Name;
public int Size;
}

[StructLayout(LayoutKind.Sequential)]
public struct CoverObject
{
public int NumOfResults;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 4)]
public Result[] Results;
}

其他地方:

Marshal.SizeOf(typeof(CoverObject)) // it will return 52

关于c# - 编码(marshal)结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55152183/

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