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.Struct
Ich 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