2017-02-20 1 views
1

Ich bin gerade dabei, ein Programm umzubauen, um zu lernen, wie es funktioniert und gerade eine Funktion zerlegt habe, die das Programm aufruft. Die Startadresse der Funktion ist in einem Zeiger gespeichert und benötigt 4 Argumente. Mein Ziel ist es, den Zeiger jetzt als eine aufrufbare Funktion zu verwenden.C++ nehme einen Zeiger und mache ihn zu einer aufrufbaren Funktion

Ich habe das vor einem Jahr oder zwei Jahren gesehen, aber nicht mehr Zugriff auf den Beispielcode, der verwendet wurde. Im Grunde möchte ich einen Zeiger nehmen, die zu Beginn einer Funktion zeigt und in diese umwandeln:

void AddValueToMain(void* basePtr, unsigned int value, __int64 compareValue, __int64 ONE_BILLION); 

Wie kann ich diesen Zeiger gegossen, so dass ich die Funktion aufrufen kann, als ob es in C++ geschrieben wurden?

+0

könnte dies möglich sein, ist aber Compiler abhängig. Sie benötigen eine Art Alternative, z. B. einen Zeiger auf einen Funktor. – user1095108

Antwort

4

Sie können reinterpret_cast zu einem Funktionszeiger. Unter der Annahme, dass m_ptr den Zeiger auf die Funktion hält:

auto AddValueToMain = reinterpret_cast<void(*)(void*,unsigned int,__int64,__int64)>(m_ptr); 

Jetzt können Sie AddValueToMain wie eine normale Funktion aufrufen:

AddValueToMain(ptr, 42, 2, 4); 
+0

Danke! Wenn ich nur die Basisadresse der Funktion hätte (sagen wir mal 0xDEADBEEFDEADBEEF), könnte ich auch wie 'auto AddValueToMain = reinterpret_cast (0xDEADBEEFDEADBEEF) ' – w0ffen

+0

Ja. Die Zuordnung zwischen Integern und Zeigern ist implementiert, aber wenn Ihre Plattform dies unterstützt, dann ist das eine Möglichkeit, das zu bekommen, was Sie wollen. – TartanLlama

Verwandte Themen