Adresse eines Elementes aus einer ref struct
-
Hallo, ich möchte gerne die Adresse eines bestimmten Elementes aus einer Struktur herausfinden.
Ich bin auf das Makro offsetof gestoßen, doch leider erhalte ich immer die folgende Fehlermeldung.Ich benötige die Struktur, da im späteren Verlauf in einem Studienprojekt die Daten auf einen Eeprom genau in der Adressreihenfolge stehen müssen.
Vielleicht kann mir ja von euch jemand weiterhelfen in Bezug auf die korrekte Verwendung von offsetOf oder evtl einen anderen Weg aufzeigen auf die Startadresse eines bestimmten Elementes zu kommen.
Header public ref struct Struktur1 { Byte bOn1; Byte bOn2; array<unsigned short>^ usSoll; }; public ref class Speicherwerte { Struktur1^ struk1; Speicherwerte(void) { this->struk1= gcnew Struktur1(); //Struktur anlegen //Arrayinit der Struktur usSoll = gcnew array<unsigned short>^(4); } bool Write(Byte bOn1, Byte bOn2, array<unsigned short>^ Soll) { unsigned int address; struk1->bOn1 = bOn1; struk1->bOn2 = bOn2; struk1->usSoll = Soll; //Mache etwas ... address = offsetof(Struktur1^ , bOn1);//C2227 //Schreibe Byte ... } };
//Meldung
error C2227: left of '->bOn1' must point to class/struct/union/generic typeMfg
-
Ich frage mal so: WARUM willst Du das wissen?
Brachte butte: Du machst *kein* C/C++ sondern C++/CLI; das ist was komplett anderes. Wenn Du von .NET Strukturen die Adresse wissen willst, so musst Du diese vorher "pinnen" (siehe pin_ptr<..>). Bei Strukturen kann man das auch mit fixed machen, wobei es sinvoll ist die Struktur mit "SequentialLayout" zu markieren die den Offset genau anzugeben, falls man die Struktur irgendwohin übergeben will!
(Wobei Du in Deinem Beispiel *nur* Klassen anlegst! (auch wenn es durch "struct" den anschein einer Struktur hat, was aber nicht der Fal ist!)).Eine "Klasse" wird in .NET durch "ref" markiert und eine Struktur durch "value".