2009-03-04 2 views
2

Я пытаюсь найти самый чистый и быстрый способ вызова методов COM-объектов.Самый быстрый способ вызова метода COM-объектов без использования RCW

Я использую RCW для объекта, но каждый раз, когда новая версия объекта COM третьего участника выходит из его GUID изменений, которые затем приводят к RCW бесполезно, так что мне пришлось изменить и начать использовать

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

, чтобы каждый раз, когда выходила новая версия COM-объекта, мне не нужно перекомпилировать и повторно развернуть мое приложение.

На данный момент я использую refelection как mytype.InvokeMemeber, но я чувствую, что он настолько медленный по сравнению с просто вызовом RCW.

Как все остальные решают проблему изменения сторонних версий COM-объектов, но при этом сохраняют скорость RCW?

ответ

4

Если вы хотите облегчить вызов в обратном направлении, вы можете использовать VB.NET и делать поздние вызовы переменной, введенной как Object. VB.NET поможет с призывами к размышлению. Вы также можете установить ссылку на Microsoft.VisualBasic.dll и сделать вызов CallByName, а также помочь в вызовах отражения.

Однако, это изменение IID (GUID интерфейса) или GUID класса? Если это GUID класса, который изменяется, вы можете определить интерфейс один раз, а затем получить тип через вызов GetTypeFromProgID. После этого вы можете передать тип методу CreateInstance в классе Activator, а затем передать его в интерфейс, который не изменится.

Если IID действительно изменится, вам придется использовать отражение каждый раз.

+0

Является ли использование позднего связывания VB медленнее, чем использование отражения в C#? –

+0

@Nathan W: Нет, это не так. Механизм в его ядре тот же (отражение). – casperOne

+0

Я узнал, что изменен только GUID класса, поэтому отличное от метода интерфейса отлично работает. Благодаря :) –

Смежные вопросы