我在这个论坛中提到了类似的问题,但没有得到我的问题的解决方案。
我一直在努力解决编组问题。我有一个包含另一个结构数组的结构,平台是Win CE。我正在使用 Visual Studio 2008 和 .NET CF 3.5。
编码:
C结构:
struct dot11Rate
{
unsigned int rate;
unsigned char mode;
};
typedef struct my_supported_rates
{
unsigned short n_rates;
struct dot11Rate srates[36];
unsigned char isSet;
unsigned char no_of_HTStreams;
}MY_SUPPORTED_DATA_RATES;
结构 MY_SUPPORTED_DATA_RATES 的大小在C中为296 字节
这是我尝试将其转换为 C# 结构:
C# 转换:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct dot11Rate
{
public uint rate;
public byte mode; /* HT=1, non-HT=0*////
};
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct my_supported_rates
{
public ushort n_rates;
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 36)]
public dot11Rate[] srates;
public byte isSet;
public byte no_of_HTStreams;
};
在这里,我使用的大小为304 字节Marshal.SizeOf(my_supported_rates);
我尝试了以下事情但没有成功:
- 在 my_supported_rates 结构的 MarshalAs 属性中添加和删除各种属性元素,例如
ArraySubType = UnmanagedType.Struct
- 我有带有所需数据的 Intptr,我尝试使用代码将 ptr 转换为结构
my_supported_rates = (my_supported_rates) Marshal.PtrToStructure(ptr,my_supported_rates.GetType());
。但是没有发生正确的转换。 - 关于博客和 StackOverflow 的其他一些建议对我没有用