Хотя средства позднего связывания C# позволяют избежать трудностей RCW, необходимо знать о некоторых, связанных с этим, недостатках.
Первый: позднее связывание может быть опасным. При использовании раннего связывания компилятор может запросить библиотеку типов компонента COM, чтобы убедиться, что все вызываемые на объектах COM методы в действительности существуют. При позднем связывании ничто не препятствует опечатке в вызове метода
InvokeMember
, что может породить ошибку во время выполнения.
Второй: позднее связывание может быть медленным.
Каждый раз при использовании
InvokeMember
на объектной ссылке среда времени выполнения должна найти требуемый член в библиотеке функций класса COM. Это приводит к снижению производительности программы.
Третий: написание кода с поздним связыванием может оказаться трудоемким. Так как не требуется ссылаться на библиотеку типов компонента COM, IDE VS.NET не может использовать Intellisense, чтобы помочь с именами членов и списками аргументов, поэтому в коде могут появиться ошибки, которые будет трудно найти до времени выполнения.
Использование элементов управления ActiveX в .NET
Элемент управления ActiveX является частным типом компонента COM, который поддерживает специальное множество интерфейсов для обеспечения графического представления. Также, как можно импортировать стандартные компоненты COM для использования в проектах .NET, можно также импортировать элементы управления ActiveX. Это позволяет сделать утилита
AxImp.exe
.
AxImp.exe
Чтобы импортировать компонент ActiveX в среду .NET, утилита
AxImp.exe
вызывается из командной строки. Команда состоит из двух частей:
1. Имени
AxImp
.
2. Абсолютного или относительного пути доступа к файлу ActiveX (
*.осх
), который должен быть импортирован.
Для примера рассмотрим снимок экрана, приведенный ниже. Здесь импортируется элемент управления ActiveX Win32 MAPI и определяется расположение файла
.осх
(
C:\windows\system\msmapi32.осх
):
Как можно видеть, программа
AxImp.exe
выводит два файла.
Первый выходной файл
MSMAPI.dll
является прокси для сборки. Он позволяет ссылаться на компонент ActiveX, как если бы это был неграфический объект, с помощью его методов и свойств таким же образом, каким используются методы и свойства неграфического класса.
Второй файл
AxMSMAPI.dll
является элементом управления Windows. Он позволяет использовать графический аспект импортированного элемента управления ActiveX как элемент управления Windows в проектах Forms Windows .NET.
При использовании
AxImp
желательно убедиться, что для этих двух выходных файлов предоставляются явные и уникальные имена, так как, по крайней мере, в бета-версии SDK .NET
AxImp.exe
имеет потенциальную возможность перезаписывать входные файлы без предупреждения.
Ссылка на сборку прокси ActiveX
Как сказано выше, вывод сборки прокси утилитой AxImp.exe позволяет ссылаться на компонент ActiveX программным путем без использования графических аспектов. Для этого необходимо просто добавить ссылку на прокси сборки с помощью вкладки Reference в IDE VS.NET после того, как AxImp.exe сделает свою работу: