如何转换C++;结构到C#等价物? 这是我的C++结构(DOC说每个实例必须是10个字节大小):
我制作了以下C#struct: 以下是我在C#项目中的完整测试代码: 这是控制台上的输出:如何转换C++;结构到C#等价物? 这是我的C++结构(DOC说每个实例必须是10个字节大小):,c#,c++,dll,interop,dllimport,C#,C++,Dll,Interop,Dllimport,我制作了以下C#struct: 以下是我在C#项目中的完整测试代码: 这是控制台上的输出: LaserPoint.Size: 8 为什么点的大小是8字节而不是10字节 UInt16 = 2 bytes UInt16 = 2 bytes byte[6] = 6 bytes Total = 10 bytes ? 我这里缺少什么?我认为问题在于阵列。。。试试这个: [StructLayout(LayoutKind.Sequential, Pack=1)] public struct Las
LaserPoint.Size: 8
为什么点的大小是8字节而不是10字节
UInt16 = 2 bytes
UInt16 = 2 bytes
byte[6] = 6 bytes
Total = 10 bytes ?
我这里缺少什么?我认为问题在于阵列。。。试试这个:
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct LaserPoint {
public UInt16 x; // 2 bytes
public UInt16 y; // 2 bytes
[MarhalAs(UnmanagedType.ByValArray, SizeConst = 6]
public byte[] colors; // 6 bytes
}
byte[]colors
不是6字节宽。它甚至不是实际的数组,而是对堆上字节数组的引用。根据您的平台,它的大小为32位(4字节)或64位(8字节)(内部为指针)。这就是为什么得到的结果是8字节的大小(2字节+2字节+4字节)。在64位平台上,您将获得12个字节(2+2+8)的大小
<> > < <代码>结构> <代码>行为类似C++ >代码>结构> <代码>添加<代码> MARSalasAtgult< /C> >并指定<代码> unMauldType。
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct LaserPoint {
public UInt16 x;
public UInt16 y;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public byte[] colors;
}
因为数组不是编译时固定大小的数组。把它想成一个C++中的指针,非常感谢!我决定接受阿德里安的回答,因为他补充了一些有用的解释。但我也投票给了你的。
UInt16 = 2 bytes
UInt16 = 2 bytes
byte[6] = 6 bytes
Total = 10 bytes ?
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct LaserPoint {
public UInt16 x; // 2 bytes
public UInt16 y; // 2 bytes
[MarhalAs(UnmanagedType.ByValArray, SizeConst = 6]
public byte[] colors; // 6 bytes
}
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct LaserPoint {
public UInt16 x; // 2 bytes
public UInt16 y; // 2 bytes
public byte[] colors; // 6 bytes
}
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct LaserPoint {
public UInt16 x;
public UInt16 y;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public byte[] colors;
}