GetProcAddress und D3D
-
Hi,
Vorwort:
Da Microsoft um uns armen Programmierern zu helfen D3D in Klassen angelegt hat kommt man ja nicht mehr ohne weiteres an die einzelnen Funktionen ran ...Wie kann ich mir mit GetProcAddress einen Zeiger auf eine Funktion des D3D9DEVICE holen, wenn ich die d3d9.dll mit LoadLibrary geladen habe?
Ich bekomme im DependencyWalker in der gesamten DLL nur ~10 Funktionen angezeigt, was definitiv nicht stimmt.
Big thanks in advance
M.T.
-
Manuel schrieb:
Da Microsoft um uns armen Programmierern zu helfen D3D in Klassen angelegt hat kommt man ja nicht mehr ohne weiteres an die einzelnen Funktionen ran ...
?
Bye, TGGC Deine Unterstützung wird gebraucht!
-
Das war nur das Vorwort ... ich arbeite eben viel lieber mit Klassen, aber in DLLs sind sie komisch.
Deswegen ja meine Frage.
M.T.
-
Manuel schrieb:
Das war nur das Vorwort ... ich arbeite eben viel lieber mit Klassen, aber in DLLs sind sie komisch.
Kann daran liegen das in DLLs keine Klassen gibt.
-
H.L.T.O schrieb:
Kann daran liegen das in DLLs keine Klassen gibt.
Das ist mir schon klar, aber es muss doch trotzdem eine Möglichkeit geben an die Adresse der Funktion zu kommen.
Wie?M.T.
-
Nur an die die exportiert werden...
-
Naja, die such ich ja ... z.B. Clear, Present, DrawPrimitive, ...
M.T.
-
Flipcode -> Tutorial über DLLs
-
Erst mal danke.
Ahvolon[F-Bytes] schrieb:
Flipcode -> Tutorial über DLLs
Dieses http://www.flipcode.com/tutorials/tut_dll01.shtml ?
Das zeigt aber auch nur wie man einfache Funktionen lädt und nicht die in den Klassen "versteckten".
Hat denn noch nie jemand eine DX-Funktion zur Laufzeit laden wollen?
M.T.
-
Frage mal hier nach
http://www.spieleprogrammierer.de/
Ich glaube ein Beispiel von D.Scherfgen gesehen zu haben.
-
H.L.T.O schrieb:
Frage mal hier nach
http://www.spieleprogrammierer.de/
Ich glaube ein Beispiel von D.Scherfgen gesehen zu haben.
OK. Danke - ich werd mein Glück versuchen.
M.T.
-
Sorry, ich kapiers immer noch nicht? Was genau geht denn nicht?
Bye, TGGC Deine Unterstützung wird gebraucht!
-
Ist leider auch n Problem, dass sich recht schwer beschreiben lässt.
Wenn ich die Adresse einer Funktion normalerweise in einer DLL suche, dann benutze ich LoadLibrary und GetProcAddress.
Jedoch ist das bei D3D durch COM relativ schwierig. <- Frage
Wenn ich nun einfach (void*)IDirect3DDevice9::Clear oder so versuche, sagt er mir (zurecht), dass diese Konvertierung nicht möglich ist, da das ein Direct3DDevice-Aufruf ist und kein allgemeiner.
Ich suche eben diese allgemeine Funktionsadresse.
M.T.
-
Aber die Methode kannst du doch immer aufrufen mit:
IDirect3DDevice9* pDev; ... pDev->Clear(bla);
Was hat das mit LoadLibrary und GetProcAddress zu tun?
Bye, TGGC Deine Unterstützung wird gebraucht!
-
Schon klar, aber um mich in fremde Anwendung einzuhängen (
) brauch ich die Speicheradresse.
M.T.
-
Die wirst du aber nicht ohne weiteres bekommen. Alles was normalerweise über GetProcAddress ermittelt wird, ist die Adresse der Funktion Direct3DCreate9. Damit erstellst du dann eine Instanz der D3D Schnittstelle, damit Devices, usw. Dh, Funktionen wie Clear oder Present werden nicht explizit in die export Tabelle der DLL aufgenommen. An die kannst du nur mit dem verwendeten Objekt und der COM Schnittstelle kommen, DLL Funktionalität wird dir dabei nicht viel helfen...
-
Thx.
Trotzdem irgend ne Idee?Ich geh mal n bisschen weiter ins Detail. Es geht um API-Hooking, falls das beim Helfen hilft
M.T.