Typ zum Speichern von Addressen (x86/x64)



  • Hallo.

    Unter C++ habe ich, wenn Speicheraddressen in Integervariablen speichern wollte, generel DWORD_PTR genutzt - dank typdef und Präprozessordefinitionen unter 32bit ein unsigned long und unter 64bit ein unsigned long long.

    Welche Option habe ich hierzu in C#? Der Code muss unbedingt unabhängig bleiben.

    Danke im voraus.
    Grüße,
    Flo.



  • Falsches Forum. Hier ist C#.



  • C#: IntPtr



  • es gibt sowas wie "ptrdiff_t" dabei muß man sich dann aber die frage stellen, ob die differenz zweier pointer den gleichen speicherplatz anbietet, wie ein pointer 😕

    lg lolo



  • theta schrieb:

    Falsches Forum. Hier ist C#.

    Ich meinte ja C# 😉

    C#: IntPtr
    

    Danke, kann man arithmetische Operationen auf diesen Typ anwenden als wäre es ein Integer?

    es gibt sowas wie "ptrdiff_t" dabei muß man sich dann aber die frage stellen, ob die differenz zweier pointer den gleichen speicherplatz anbietet, wie ein pointer

    Logischerweise schon-



  • Icematix schrieb:

    Danke, kann man arithmetische Operationen auf diesen Typ anwenden als wäre es ein Integer?

    Ich glaube nicht (Aber es gibt z.B. .ToPointer()...)

    Was genau hast du da vor? Warum nicht direkt Pointer benutzen wenn du mit Speicheradressen rumhantierst?



  • geeky schrieb:

    Icematix schrieb:

    Danke, kann man arithmetische Operationen auf diesen Typ anwenden als wäre es ein Integer?

    Ich glaube nicht (Aber es gibt z.B. .ToPointer()...)

    Was genau hast du da vor? Warum nicht direkt Pointer benutzen wenn du mit Speicheradressen rumhantierst?

    Ich porte gerade meine C++ Gamehacking Klasse.
    Dh., die Speicheraddressen, mit denen ich hantiere, sind nicht in meinem Prozess.

    Naja, vielleicht löse ich es über Generics, der Nutzer wählt am Anfang aus welcher Typ zum Speichern von Addressen genutzt wird.


  • Administrator

    Erinnert mich jetzt gerade:
    http://german-bash.org/25242

    Gut, du programmierst wohl kein Wurm, aber irgendwie erscheint mir für diese Aufgabe C# ein wenig die falsche Sprache zu sein 😉

    Aber noch zwei Dinge:
    IntPtr.ToInt64
    IntPtr(Int64)

    Also speichere das Dinge in einem Int64 ab auf 32 und 64 Bit Architektur. Der Konstruktor wirft eine Exception, wenn du unter 32 Bit bist und die Adresse ausserhalb des möglichen Adressbereichs ist.

    Grüssli


Anmelden zum Antworten