Funktionszeiger und Templates
-
Hallo!
Ich bin gerade dabei, einen Wrapper für Detours zu schreiben, einer Hooking-Library von Microsoft.
Nunja, erste Frage, wenn ich jetzt soetwas bastle:
template<class F> void do(F function) { function(); }hat das genau den selben Effekt im Code als würde ich einen void-Zeiger übergeben und diesen zurechtcasten, richtig ?
Nun ja, auf jeden Fall habe ich ein paar Probleme mit dem Code

Das ist der Funktionsprototyp, den ich hier wrappen möchte:
DetourAttach(void** ppPointer, void* detour);Mein Ansatz, der so aber nicht nicht funktioniert:
template<class F> void InstallHook(F oldFunction, F newFunction) { DetourAttach(&oldFunction, newfunction); }Wo hängts?

Danke im voraus.Grüße
-
Nein. Das ist nicht das gleiche. Templates sind immernoch Typsicher. Das heisst, dass du da auch einen ganz normalen Typen stehen hast. Jedes mögliche T macht dir eine neue Funktion, aber um den cast kommst du nicht herum.
Das nächste mal wäre es auch praktsich, wenn du den Fehler oder was genau nicht geht näher erläutern würdest..
-
drakon schrieb:
Nein. Das ist nicht das gleiche. Templates sind immernoch Typsicher. Das heisst, dass du da auch einen ganz normalen Typen stehen hast. Jedes mögliche T macht dir eine neue Funktion, aber um den cast kommst du nicht herum.
Was muss ich denn noch machen um das zum Laufen zu bekommen?
template<class F> void InstallHook(F oldFunction, F newFunction) { DetourAttach(reinterpret_cast<void*&>(oldFunction), newfunction); }So sieht es derzeit aus.
Das nächste mal wäre es auch praktsich, wenn du den Fehler oder was genau nicht geht näher erläutern würdest..
Ganz einfach. Die Funktion wird nicht gehookt, also zeigt der Doppelzeiger irgendwo ins Nirvana, ohne eine Access-Violation zu verursachen und ohne etwas relevantes zu überschreiben ...
-
Na. Das liegt wohl kaum an der Umwandlung der Typen.. Da gibt es höchstens Kompilierfehler, wenn da was nicht passt.
Such den Fehler wo anderst.