问题标签 [structlayout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
72 浏览

c# - C# 类的嵌套数组

几周前我发布了一个相关问题:Marshal.Sizeof() 返回意外值

作为背景,我们聘请了第三方将旧的 C++ 项目转换为 C#。这是一个通过以太网发送/接收消息的通信协议应用程序,其中所有消息都包含有效负载,这些有效负载是已定义结构的序列化表示:

这些被转换为 C# 类:

我的问题是 LCT_T 类的 group_config_bytes 元素。以编程方式这是可行的,但是 GROUP_T 结构的原始数组丢失了等效的字节数组(最初,GROUP_T 数组为空且未使用)。现在我需要为单个 GROUP_T 对象设置值,所以我需要嵌套数组的类版本:

这可以编译,但 Marshal.SizeOf(typeof(LCT_T)) 返回错误的大小(应该是 11 + (8 * 10) = 91)。

如果没有这个更新的 LCT_T 类定义,如果我需要设置单个组的元素,我必须直接将值插入group_config_bytes,这很丑陋,容易出错,并且对于此代码的未来维护者来说不清楚。

那么:在类中定义嵌套类数组的正确方法是什么?

0 投票
1 回答
322 浏览

c# - C#10 的只读记录结构是否保证与显式实现相同的字段大小和对齐方式?

我做需要连续数据的事情。现在有了 C# 10,我们可以做public readonly record struct.

我喜欢拥有记录所具有的自动 ToString 功能等,因此为我完成这项工作非常好。

因此,以下等效项吗?

与简洁的 C# 10 版本相比

或者有没有我会不小心踩到的地雷?我的意思是有什么事情是在幕后做的,record这使得我上面写的东西在连续包装方面不符合我的要求吗?我不能让记录插入填充、间距或做任何奇怪的事情。

我没有使用带有记录结构的向量类,而是出于说明目的使用它。您可以忽略诸如“浮点相等比较”之类的事情,因为我只对是否可以将其传递给期望 X/Y/Z 的连续序列的库感兴趣。

0 投票
1 回答
23 浏览

c# - RtFieldInfo.FieldType 导致 System.TypeLoadException:无法从程序集“A ...”加载类型“SubClass”,因为格式无效

我将程序缩小到:

输出:

为什么会发生异常?我可以在子类上使用 StructLayout 吗?

0 投票
0 回答
51 浏览

c# - 带有联合字节数组映射的 C 到 C# 结构

我想知道如何在 C# 中实现数据。我知道我可以使用 StructureLayout,但是声明的内存大小与 c 不同。我希望输出为00-00-80-00-00-00-00-00-00.