Я использовал средство импорта библиотеки типов (TlbImp.exe) для создания сборки взаимодействия для взаимодействия с COM-объектом. Я пытаюсь построить дерево выражений, которое вызывает метод COM-объекта. Я хочу скомпилировать дерево выражения в лямбду и кэшировать его.
Причина, по которой я хочу это сделать, состоит в том, что в этом COM-объекте есть много похожих интерфейсов, в которых изменяется только тип параметра. Например, есть интерфейс для IFooDouble, IFooInt, IFooString, IFooLongInt, et c. Затем каждый из них будет определять метод SetValue (значение T), где T будет либо double, int, string, et c., В зависимости от интерфейса. Здесь я бы скомпилировал дерево выражений в лямбду Action<IFooBase, T>
и кэшировал бы его.
Сгенерированная сборка взаимодействия содержит строго типизированные интерфейсы для метода SetValue
, но я не могу найти способ получить ссылку на него MethodInfo
объект через отражение. Поскольку тип оболочки - System.__ComObject
, я могу вызвать InvokeMember
и сделать это таким же образом. Однако мне интересно, будет ли это намного медленнее, чем если бы я вызвал метод напрямую через один из интерфейсов взаимодействия? То есть мне интересно, будет ли IFooBase.InvokeMember("SetValue", ...)
иметь гораздо худшую производительность, чем IFooDouble.SetValue(11.3)
, особенно при выполнении большого количества повторных вызовов.