Frage

Ich versuche, die sauberste und schnellste Weg zum Aufrufen eines COM-Methoden-Objekte zu finden.

Ich war ein RCW für das Objekt verwenden, aber eine neue Version des Dritten COM-Objekt jedes Mal seine GUID Änderungen kommt, die dann die RCW unbrauchbar macht, also musste ich und starten Sie ändern mit

Type mytype = Type.GetTypeFromProgID("MyCOMApp.Application"); 

so, dass jedes Mal, wenn eine neue Version des COM-Objekts kommt muß ich nicht recomplie und meine Anwendung erneut bereitstellen.

Im Moment verwende ich refelection wie mytype.InvokeMemeber aber ich fühle es so langsam ist, im Vergleich zu nur den RCW aufrufen.

Wie jeder andere auch das Problem der Bewältigung 3rd-Party-COM-Objekt-Versionen zu ändern, aber immer noch die Geschwindigkeit eines RCW beibehalten?

War es hilfreich?

Lösung

Wenn Sie die Anrufe in der Reflexion erleichtern möchten, können Sie VB.NET, verwenden und späte Anrufe auf eine Variable als Objekt eingegeben werden. VB.NET wird mit den Aufforderungen Reflexion helfen. Sie können auch einen Verweis auf Microsoft.VisualBasic.dll gesetzt und der Anruf auch CallByName mit den Reflexions Anrufe zu helfen.

Es ist jedoch die IID (die Schnittstelle GUID) oder die Klasse GUID, das ändert? Wenn es die Klasse GUID ist, das ändert, dann können Sie die Schnittstelle einmal definieren und dann den Typen durch einen Aufruf GetTypeFromProgID bekommen. Sobald Sie, dass, können Sie den Typ der CreateInstance-Methode auf der Activator-Klasse übergeben und werfen dann an die Schnittstelle, die nicht ändern wird.

Wenn die IID, jedoch ändert, werden Sie Reflektion verwenden jedes Mal haben.

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