Entwickler-Ecke

Basistechnologien - Zugriff auf Struktur


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;   // Debugwerte
    };



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(), 312);     //Decode gibt ein 48 Byte in Form eines Integerarrays zurück
            
                fixed (int* pRxData = &result[1]) { 
                    byte* firstbyte = (byte*)pRxData;    //firstbyte symbolsiert das erste Byte der Struktur die man von der FC zurückbekommt. (d.h das 4. Byte des der gesamten Rückgabe der FC)
                    DebugOut = (str_DebugOut*)firstbyte;      //DebugOut ist der Zeiger der nun auf das das erste Byte zeigt

               
               /****** Hier passiert der Fehler "Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben."  (AccessViolationException)**********/  
                    Console.WriteLine(DebugOut->Analog[1]); //Beispielweise soll nun auf die Analogdaten zugegriffen werden
               /***********************************************************************************************/          
                

                };
                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 user profile iconKha: 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.