derpfarrer - Di 03.08.10 19:58
Titel: Zugriff auf Struktur
Hallo Leute!
Ich habe ein kleines Problem mit einer speicherverletzung beim Debugdaten auslesen.
Code ist in C#.
Hier die Struktur
C#-Quelltext
1: 2: 3: 4: 5:
| unsafe public struct str_DebugOut { public uint* Status; public Int16* Analog; }; |
soll die DebugStruktur repräsentieren, die die FC zurücksendet.
Hier die deklaration meines Zeigers auf die Struktur
C#-Quelltext
1:
| public static str_DebugOut* DebugOut; |
und hier der Aufruf und das Auslesen
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| }else if(is_send && send_buff[2] == (byte)'d'){ int[] result = MicroLibrary.SerialData.decode64(port.ReadExisting().ToCharArray(), 3, 12); fixed (int* pRxData = &result[1]) { byte* firstbyte = (byte*)pRxData; DebugOut = (str_DebugOut*)firstbyte; Console.WriteLine(DebugOut->Analog[1]);
}; is_send = false;
} |
Auf unzähligen Foren und Websites suche ich nun schon nach der Lösung dieses Problems.
Vielleicht fällt euch was dazu ein?
Mir wäre echt geholfen für jede Antwort von euch!
Danke schon im voraus!
Freundliche Grüße
Patrick
Moderiert von
Kha: Quote- durch C#-Tags ersetzt
Kha - Di 03.08.10 20:37
:welcome:
Dass das mit den Pointern nicht stimmen kann, wurde ja
bereits geschrieben [
http://forum.mikrokopter.de/topic-post223746.html#post223746]...
Schau dir einmal
Marshal.PtrToStructure an, damit kannst du den Buffer in ein Struct umwandeln. Im Beispiel sind auch gleich die nötigen Attribute angegeben, damit die Array-Daten direkt aus dem Buffer genommen und nicht als Pointer interpretiert werden.