2009-03-04 2 views
2

Ich versuche, die sauberste und schnellste Weg zum Aufrufen eines COM-Methoden-Objekte zu finden.schnellste Weg, um eine COM-Objekte Methode aufrufen, ohne ein RCW mit

ich ein RCW für das Objekt verwenden, aber jedes Mal, wenn eine neue Version des dritten Objekts Partei COM kommt seine GUID Änderungen aus, die dann die RCW unbrauchbar macht, also musste ich und

mit beginnen zu ändern
Type mytype = Type.GetTypeFromProgID("MyCOMApp.Application"); 

, so dass jedes Mal, wenn eine neue Version des COM-Objekts herauskommt, ich meine App nicht neu kompilieren und erneut bereitstellen muss.

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

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

Antwort

4

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 hilft bei den Aufrufen zur Reflexion. Sie können auch einen Verweis auf Microsoft.VisualBasic.dll festlegen und den Aufruf von CallByName ebenfalls ausführen, um bei den Reflektionsaufrufen zu helfen.

Allerdings ist es die IID (die Schnittstelle GUID) oder die Klasse GUID, das ändert? Wenn sich die Klassen-GUID ändert, können Sie die Schnittstelle einmal definieren und dann den Typ über einen Aufruf von GetTypeFromProgID abrufen. Sobald Sie das haben, können Sie den Typ an die CreateInstance-Methode für die Activator-Klasse übergeben und dann an die Schnittstelle übergeben, die sich nicht ändert.

Wenn die IID, jedoch ändern, müssen Sie Reflexion jedes Mal verwenden.

+0

Verwendet VB späte Bindung langsamer als mit Reflektion in C#? –

+0

@Nathan W: Nein, ist es nicht. Der Mechanismus in seinem Kern ist der gleiche (Reflexion). – casperOne

+0

Ich fand heraus, dass nur die Klassen-GUID geändert wird, so dass die Umwandlung in die Interface-Methode großartig funktioniert. Vielen Dank :) –

Verwandte Themen