【发布时间】:2021-08-08 12:24:24
【问题描述】:
我正在用这个敲我的头。 我有一个 C# 结构:
[StructLayout(LayoutKind.Sequential)]
public struct Enroll
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 101)]
public char[] Name;
public UInt16 Port;
public byte Num;
public byte Max;
public UInt64 Version;
public byte TS;
public byte Avg;
public byte Flags;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public char[] Tag;
}
总共 132 个字节。 不过
S.Enroll X = new();
int size = Marshal.SizeOf(X);
计算 144 个字节,因此无法成功将字节映射到结构。
Sender 是一个 C++ 应用程序,其结构声明如下:
struct Enroll
{
public:
char Name[101] = { 0 };
uint16 Port = 0;
uint8 Num = 0;
uint8 Max = 0;
uint64 Version = 0;
uint8 TS = 0;
uint8 Avg = 0;
DevFlags Flags = DevFlags ::None;
char Tag[16] = { 0 };
};
这导致我可以一个一个读取实际的 132 个字节。
我错过了什么?
谢谢
【问题讨论】:
标签: c# c++ marshalling