unresolved external symbol: DllGetClassObject
-
Hey!
Hab schon alle lib's includiert, die man nur kann. Es hilft nix, diese Funktion lässt sich nicht auflösen...
Was kann ich tun? Bei anderen API's kein Problem...
MfG
-
MSDN schrieb:
OLE does not provide this function. DLLs that support the OLE Component Object Model (COM) must implement DllGetClassObject in OLE object handlers or DLL applications.
[...]
Remarks
If a call to the CoGetClassObject function finds the class object that is to be loaded in a DLL, CoGetClassObject uses the DLL's exported DllGetClassObject function.
Notes to CallersYou should not call DllGetClassObject directly. When an object is defined in a DLL, CoGetClassObject calls the CoLoadLibrary function to load the DLL, which, in turn, calls DllGetClassObject.
Notes to ImplementersYou need to implement DllGetClassObject in (and export it from) DLLs that support the OLE Component Object Model.
greetz, Swordfish
-
Oh danke...
Es geht nämlich um Folgendes:
Ich möchte die Funktion, welche ein IDirectPlay8Server Interface erstellt, hooken.
Die gameserver-Anwendung erstellt dabei einen "Microsoft DirectPlay 8 Server", dpnsvr.exe. Dieser benutzt einen InProcServer32, soweit ich verstanden habe kommt IDirectPlay8Server also aus einer DLL, und wird nicht von dpnsvr.exe erstellt, denn mit "CoCreateInstance()" wurde es nicht erstellt, habe ich schon geprüft.Nun dachte ich, ich könne einfach "DllGetClassObject()" von dpnsvr.exe hooken und mir so das Interface holen, aber naja...
Jemand ne Idee, wie ich an das IDirectPlay8Server rankommen könnte?
Danke!
MfG
-
Es muss ja auch nicht direkt CoCreateInstance verwendet werden.
Es kann klassisch die Classfactory erzeugt werden und mit dieser dann das Objekt erzeugt werden.
-
Ich weiß nicht was das bedeutet.
Daher bleibt meine Frage:
Jemand ne Idee, wie ich an das IDirectPlay8Server rankommen könnte?MfG
-
Das hab ich grad gefunden:
"The DPNSVR helper application is launched when IDirectPlay8Server::Host is called..."
Also wird IDirectPlay8Server wohl doch von der gameserver-application erstellt. Aber durch welche Funktion kann das geschehen? CoCreateInstance() wird nicht aufgerufen... durch welches API könnte sich die Anwendung noch das Interface instanziieren?
MfG
-
Durch gar keine. Das Interface wird evtl. direkt intern erzeugt und der Zeiger zurückgegeben.
-
Warum hätten sich die Entwickler den Umstand machen sollen?
Welche Möglichkeiten habe ich dann, an das Interface ranzukommen? Ich muss nämlich die IDirectPlay8Server::Initialize()-Funktion hooken, um vor dem eigentlichen MessageHandler noch meinen aufzurufen.Danke!
MfG
-
Das ist doch kein Umstand.
Ich habe X-Interfaces in meinen COM Objekten, die Objekte als Zeiger liefern, die man nicht per CoCreateInstance anlegen kann. Das ist kein Nachteil, sondenr eher ein Design Vorteil in vielen Fällen, weil man abhängige Objekte damit einfacher erzeugen kann.
Wenn es so ist, dass dieses Objekt durch ein anderes instanziiert wird, hast Du 0 Chancen...
-
Ich hab grade von einer "Running Object Table" gelesen.
Könnte ich nicht dadurch den Zeiger des IDirectPlay8Server bekommen, damit den Funktionszeiger auf dessen Initialize() Methode holen und diese wiederum mit MS Detours hooken?0 Chance meinst du... jetzt fühl ich mich scheisse. Ich muss das einfach schaffen
Ist sehr wichtig für mich.
Es muss doch Wege geben...
MfG
-
Nein! Auch aus der ROT bekommst Du nur einen Proxy. D.h. Dein Interface. Jeder andere Prozess bekommen einen eigenen Proxy.
Wie gesagt: Wenn dieses Interface direkt erzeugt wird von einem anderen Objekt, dann hast Du keine Chance. Wenn irgendwo eine Class Factory im Spiel ist, hättest Du eine...
Aber das hört sich nicht so an.
-
Mist
Welche Möglichkeiten gibt es, eine nicht-WINAPI Funktion eines fremden Prozesses zu hooken? Ich hab es schon hinbekommen, eine Adresse zu überschreiben, jedoch schaffe ich es dann nicht, dass danach noch die Originalfunktion aufgerufen wird. Weiters weiß ich nicht, wie ich die Adresse eben dieser Funktion herausfinden soll...
Konkret würde es dabei um...
HRESULT WINAPI DirectPlayServerMessageHandler(...)
...gehen.
MfG