C# 编组数据类型问题 下面是我试图从C++转换成C<< /p>的代码
之前,我写了下面的结构C# 编组数据类型问题 下面是我试图从C++转换成C<< /p>的代码,c#,C#,之前,我写了下面的结构 [StructLayout(LayoutKind.Explicit)] public struct PSB { [FieldOffset(0)] public short type_of_psb; [FieldOffset(2)] public short call_dependent; [FieldOff
[StructLayout(LayoutKind.Explicit)]
public struct PSB
{
[FieldOffset(0)]
public short type_of_psb;
[FieldOffset(2)]
public short call_dependent;
[FieldOffset(4)]
public int del_psb_status;
[FieldOffset(8)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public uint32 seq_number; // Here is the problem
[FieldOffset(16)]
public int uma_psb_status;
[FieldOffset(20)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public short[] psb_reserved;
}
但上面的c#代码不起作用,问题在于成员序号
所以我把它改成了
public ulong seq_number
来自uint seq_number
,我删除了上面的marshallas属性
现在它正在处理遗留代码。我不知道为什么?如果我定义为数组,那么问题是什么?< p>你的C++结构和你的代码> MsHalalas[/Cuff]属性都把这个类型列为数组,但是你的C结构只是声明了一个数字。我不确定您到底遇到了什么错误,但看起来您试图将两个数字的数组转换为一个数字,这显然会导致一些问题
尝试将
marshallas
属性保持在发布的结构中,只需替换public uint32序列号代码>带有公共uint32[]序号
我看不出序列号
是一个数组。它不应该是公共uint32[]seq\u number
,我猜ulong可以工作,因为它将被存储为两个连续整数,但可能存在LSB问题…我应用了公共uint32[]seq\u number,但问题依然存在same@kamal:请编辑您的帖子,并注明您收到的确切错误以及产生该错误的代码。
[StructLayout(LayoutKind.Explicit)]
public struct PSB
{
[FieldOffset(0)]
public short type_of_psb;
[FieldOffset(2)]
public short call_dependent;
[FieldOffset(4)]
public int del_psb_status;
[FieldOffset(8)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public uint32 seq_number; // Here is the problem
[FieldOffset(16)]
public int uma_psb_status;
[FieldOffset(20)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public short[] psb_reserved;
}