/ / Найшвидший спосіб викликати метод об'єктів COM без використання RCW - відображення, com, interop, rcw

Найшвидший спосіб викликати метод COM-об'єктів без використання RCW-reflection, com, interop, rcw

Я намагаюся знайти найчистіший і найшвидший спосіб для виклику методів об’єктів COM.

Я використовував RCW для об'єкта, але кожен раз, коли нова версія стороннього об'єкта COM з'являється його GUID зміни, які потім роблять RCW марними, тому мені довелося змінити і почати використовувати

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

тож щоразу, коли виходить нова версія об’єкта COM, мені не доведеться перекомпонувати та перерозподілити додаток.

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

Як усі інші вирішують проблему зміни сторонніх версій об’єктів COM, але все ж підтримуючи швидкість RCW?

Відповіді:

4 для відповіді № 1

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

Однак це IID (GUID інтерфейсу) абоGUID класу, який змінюється? Якщо це GUID класу, який змінюється, то ви можете один раз визначити інтерфейс, а потім отримати Тип через виклик GetTypeFromProgID. Після цього ви можете передати тип методу CreateInstance класу Activator, а потім передати в інтерфейс, який не зміниться.

Якщо IID все-таки зміниться, вам доведеться кожен раз використовувати рефлексію.