ich die Erinnerung an ein Spiel zu modifizieren, dafür ich etwas tun, wie folgt aus:Template-Funktion zu manipulieren Speicher
*(float*)0x89635637 = 10.0f;
Jetzt möchte ich dies in eine Template-Funktion einzuschalten, die mir das lesen und einstellen können Speicher mit nur einmal die Adresse zu schreiben, dachte ich an so etwas wie dieses:
template <typename Variable> Variable GetSetAddress(Variable address, Variable value = NULL)
{
if (value != NULL)
*(Variable*)address = value;
return *(Variable*)address;
}
Jetzt habe ich versucht, es so nennen:
float value = GetSetAddress<float>(0x89635637, 10.0f);
Aber es gab mir diesen Fehler:
error C2440: 'type cast' : cannot convert from 'float' to 'float *'
ich mit der Verwendung von Vorlagen ziemlich unerfahren bin, so dass ich wäre dankbar, wenn mir einer von euch in die richtige Richtung zeigen könnte. Danke im Voraus!
Was genau sind Sie mit 'Variablenwert zu tun Planung = NULL'? In Ihrem Fall ist 'Variable'' float', also 'float value = NULL'. Angenommen, Ihr Compiler definiert "NULL" als "nullptr" kann es nicht kompilieren – UnholySheep
Welches Spiel? Auf welcher Plattform? Bietet diese Plattform irgendeine Form von Garantie, dass das Ändern bestimmter Adressen vorhersehbares Verhalten hat? Das ist normalerweise ein No-No, es sei denn, Sie arbeiten an hochspezifischer Hardware. Jedenfalls verletzt dieser Fall die Lebensdauer und die Aliasing-Regeln des Objekts, es sei denn, eine Instanz des angegebenen Typs wurde vorher wirklich dort konstruiert. Ich bin auch neugierig, was es heißt, den gleichen Wert zurückzugeben, der weitergegeben wurde, aber das ist meine geringste Sorge hier. –
@underscore_d Es ist ein Call of Duty Spiel auf Xbox360 und ich hatte keine Probleme mit * (float *) address = value; bis jetzt. Und ich gebe nicht den gleichen Wert zurück, der übergeben wurde, ich gebe den Wert an diesem Punkt im Speicher zurück, also kann ich diese Funktion verwenden, um den Speicher einzustellen und/oder nur seinen aktuellen Wert – SupaDupa