I referred the similar questions in this forum but didn\'t get the solution for my problem.
I have been struggling with marshaling problem for a while. I have a structur
Your translations look good to me. Running on desktop rather than CE I find that, for these types
[StructLayout(LayoutKind.Sequential)]
public struct dot11Rate
{
public uint rate;
public byte mode;
};
[StructLayout(LayoutKind.Sequential)]
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;
};
that
Marshal.SizeOf(typeof(my_supported_rates)) == 296
So it would seem to be something odd in the CE pinvoke marshaller. You might need to force the hand of the marshaller by doing this:
[StructLayout(LayoutKind.Explicit, Size=296)]
public struct my_supported_rates
{
[FieldOffset(0)]
public ushort n_rates;
[FieldOffset(4)]
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 36)]
public dot11Rate[] srates;
[FieldOffset(292)]
public byte isSet;
[FieldOffset(293)]
public byte no_of_HTStreams;
};
That is, if LayoutKind.Explicit and FieldOffset are supported on CE.
If they are not supported then you'll need to marshal by hand. You are looking for Marshal.AllocHGlobal and then Marshal.ReadByte, Marshal.ReadInt16 and so on.