Gibt es eine Möglichkeit CoGetClassObject und / oder CoCreateInstance Anrufe an Haken oder abfangen?

StackOverflow https://stackoverflow.com/questions/1604913

Frage

Ich möchte die COM CoCreateInstanceEx und / oder CoGetClassObject Funktionen eine Klasse mit einer Test shim in einem Komponententest ersetzen. Dies wird nur für einen einzelnen CLSID sein; alle anderen können unverändert durchgehen. Gibt es eine Möglichkeit, dies ohne schreckliche, böse Hacks zu tun?

War es hilfreich?

Lösung

Es hängt davon ab, was genau Sie wollen.

Wenn Sie möchten, zu erkennen, wer diese Klasse wird geladen oder zu finden, ob es überhaupt geladen wird Sie verwenden können, Process Monitor . Ein Aufruf von CoGetClassObject() (oder CoCreateInstanceEx()) wird ein HKCR\CLSID\{Class of interest id} Schlüssel führen gelesen und Process Monitor zeigt Ihnen, welche Verfahren und wann tut dies und wie erfolgreich es ist.

Wenn Sie eine bestehende Klasse mit Sich ersetzen - einer Bibliothek mit Ihrer Version der Klasse mit der gleichen Klasse-ID erstellen und dem Pfad zu dem COM-Server innerhalb HKCR\CLSID\{Class of interest id} ändern, so dass die Bibliothek verwendet, um eine Klasse mit dieser ID zu dienen . Sie können die manuell oder mit regsvr32 tun - zuerst der ursprünglichen Bibliothek registrieren, dann bei Ihnen die Klasse von Interesse registartion außer Kraft zu setzen. COM tut Klasse id -.> Bibliothek Mapping durch diesen Schlüssel, wenn ein Verbraucher ruft CoGetClassObject() oder CoCreateInstanceEx()

Andere Tipps

Es gibt immer die CoTreatAsClass Funktion: http://msdn.microsoft.com/en-us /library/ms693452(VS.85).aspx

Aber, wie Sie bemerkt, wird es ein systemweite Austausch der Klasse sein, nicht eine lokale Änderung.

Alternativ können Sie CoCreateInstance Blick in Einhaken wie in der Post verwiesen von Shay Erlichmen Kommentar vorgeschlagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top