Einem Objekt eine feste Speicheradresse zuweisen?
-
Hey Leute,
Ich habe eine Frage bezüglich Speicheradressen und Klassen. Ich habe eine Struktur von einer Klasse in einem Spiel und die Datentypen der Variablen die dort enthalten sind. Ich habe auch die Adresse dieser Klasse. Nun wollte ich wissen ob es möglich ist, einem Objekt von dieser Klasse die Speicheradresse dieser Klasse zuzuweisen, á laCStats *stats = new CStats(); stats = 0xFFFFFFF;?
Also natürlich nicht so, aber gibt es einen ähnlichen Weg? Denn mir fällt kein anderer Weg ein an die Informationen dieser Klasse zu kommen und diese in meiner DLL weiter zu verwenden. Auf diese Idee bin ich wegen den Funktionszeigern gekommen, denen kann man ja mit der richtigen deklaration auch eine Adresse zuweisen.
Mfg
-
Xdab4yaX schrieb:
Ich habe eine Struktur von einer Klasse
Wie genau? Ich nehme jetzt einfach mal an, du meinst Klasse.
Xdab4yaX schrieb:
Ich habe auch die Adresse dieser Klasse.
Wie soll eine Klasse eine Adresse haben?
Xdab4yaX schrieb:
Nun wollte ich wissen ob es möglich ist, einem Objekt von dieser Klasse die Speicheradresse dieser Klasse zuzuweisen
Da ich schon den Anfang nicht verstehe, kann ich dir das nicht beantworten. Aber grundsätzlich kannst du Adressen nicht hardcoden und zuweisen, du kannst höchstens ein Objekt an einer bekannten Adresse konstruieren, deren Speicherplatz dir gehört.
-
Xdab4yaX schrieb:
Hey Leute,
Ich habe eine Frage bezüglich Speicheradressen und Klassen. Ich habe eine Struktur von einer Klasse in einem Spiel und die Datentypen der Variablen die dort enthalten sind. Ich habe auch die Adresse dieser Klasse. Nun wollte ich wissen ob es möglich ist, einem Objekt von dieser Klasse die Speicheradresse dieser Klasse zuzuweisen, á laCStats *stats = new CStats(); stats = 0xFFFFFFF;Nein, das funktioniert nicht. Aber der umgekehrte Weg, also wenn Du die Adresse des Objekts vorher kennst:
char *stats = new char[sizeof(CStats)]; new (stats) CStats();Siehe hier: http://www.devx.com/tips/Tip/12582
-
oder einfach casten:
klasse *object = reinterpret_cast<klasse *>(0x12345678);
-
Eigentlich sollte genau das funktionieren, auch wenn ich absolut nicht verstehe, wozu das gut sein soll:
CStats *stats = reinterpret_cast<CStats*>(0xFFFFFFF);Beachte, dass hier ein reinterpret_cast nötig ist. Der Compiler sieht nämlich, dass du da Dummheiten vor hast und versucht es zu verhindern. Von daher ist es nötig zum stärksten Cast zu greifen um das von dir gewünschte Verhalten zu erzwingen.
Beschreib mal dein Problem etwas genauer, denn es gibt garantiert eine bessere Lösung als dies.
-
Heißt das, du hast eine Klasse die du in einer DLL verwenden willst und weißt die Adresse einer Membervariablen nicht ?
Aber du kannst keine "Fixadressen" verwenden, du must die nehmen, die dir das Betriebssystem zuweist, zmindest habe ich bisher nichts Gegenteiliges gehört

Was genau willst du denn in deiner DLL mit der Klasse machen ?
Du könntest einige Membervariablen durch Funktionen zugreifbar machen. Aber wie gesagt, beschreib erstmal dein Problem näher
-
SeppJ schrieb:
Eigentlich sollte genau das funktionieren, auch wenn ich absolut nicht verstehe, wozu das gut sein soll:
CStats *stats = reinterpret_cast<CStats*>(0xFFFFFFF);Es funktioniert syntaktisch, von mir aus auch in Kurzschreibweise
CStats *stats = (CStats*)0xFFFFFFF;Aber es ist Unsinn.