Marshalling C Struct mit einer Reihe von Strukturen

Ich verwies auf ähnliche Fragen in diesem Forum, bekam aber keine Lösung für mein Problem.

Ich habe eine Weile mit dem Marshalling-Problem zu kämpfen. Ich habe eine Struktur, die ein Array einer anderen Struktur enthält, Die Plattform istGewinnen Sie CE. Ich verwende Visual Studio 2008 und .NET CF 3.5.

Der Code:

C Strukturen:

 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;

Größe der Struktur MY_SUPPORTED_DATA_RATES ist296 Bytes imC

Dies ist mein Versuch, es in eine C # -Struktur zu konvertieren:

C # konvertiert:

    [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;
    };

Hier bekomme ich die Größe wie304 Bytes mitMarshal.SizeOf(my_supported_rates);

Ich habe die folgenden Dinge ohne Erfolg versucht:

Hinzufügen und Entfernen verschiedener attrubute-Elemente im MarshalAs-Attribut in der Struktur my_supported_rates, zArraySubType = UnmanagedType.StructIch habe Intptr mit erforderlichen Daten und ich habe versucht, Ptr in die Struktur mit dem Code zu konvertierenmy_supported_rates = (my_supported_rates) Marshal.PtrToStructure(ptr,my_supported_rates.GetType());. Eine ordnungsgemäße Konvertierung findet jedoch nicht statt.Einige andere Vorschläge für Blogs und StackOverflow, die sich für mich nicht als nützlich erwiesen haben

Antworten auf die Frage(1)

Ihre Antwort auf die Frage