Самый быстрый способ вызова метода COM-объектов без использования RCW - PullRequest
2 голосов
/ 04 марта 2009

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

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

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

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

В настоящее время я использую рефлексию как mytype.InvokeMemeber, но я чувствую, что это так медленно по сравнению с простым вызовом RCW.

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

1 Ответ

4 голосов
/ 04 марта 2009

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

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

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

...