Динамическое связывание клиента на основе модели компонентных объектов Microsoft (COM) с компонентами .NET
Существующие клиенты на основе модели компонентных объектов Microsoft (COM) можно динамически связать с управляемыми компонентами, так как все управляемые типы непосредственно поддерживают стандартный интерфейс модели компонентных объектов Microsoft (COM) – IDispatch. Способ, которым это выполняет общеязыковая среда выполнения CLR платформы .NET, чем-то похож на традиционное динамическое связывание в Visual Basic. Без всяких усилий в области программирования общеязыковая среда выполнения CLR немедленно генерирует реализацию IDispatch, основываясь на метаданных, обнаруженных в сборке компонента.
Несмотря на то, что клиент динамического связывания может быть написан в Visual C++ 6.0 с использованием интеллектуального указателя библиотеки шаблонных классов ATL или даже непосредственного вызова методов IDispatch, проще это можно продемонстрировать, взяв клиент, который реализован с помощью короля динамического связывания – Visual Basic.
Как и для любого клиента (построенного на основе модели компонентных объектов Microsoft (COM)) компонента .NET, для клиента на VB требуется создать необходимые элементы в системном реестре для компонента .NET. Здесь можно воспользоваться утилитой регистрации сборки Regasm.exe (Assembly Registration Utility). Это требуется выполнить только для регистрации компонента. Однако утилита регистрации сборки Regasm.exe (Assembly Registration Utility) может быть использована с флагом /tlb для генерации библиотеки типов в дополнение к регистрации упомянутых типов сборки. Именно это мы собираемся сделать для следующего примера, написанного на VB, так что запустим утилиту регистрации сборки Regasm.exe (Assembly Registration Utility) еще раз, но уже с флагом /tlb:
Regasm SomeManagedClass.dll /tlb
Затем в Visual Basic можно добавить к проекту ссылку на файл SomeManagedClass.tlb. Это сделает доступным класс ManagedClass. Кроме того, обычно требуется добавить ссылку на библиотеку типов mscorlib.tlb, чтобы открыть доступ к различным типам .NET.
И еще: сборку SomeManagedClass.dll нужно либо скопировать в папку клиента, либо занести в глобальный кэш сборок. Следующий фрагмент программы на VB демонстрирует динамическое связывание с компонентом .NET:
Private Sub Commandl_Click() ' Частный Dim obj As Object ' Как Объект Set obj = CreateObject( "SomeManagedClass.ManagedClass") ' программный идентификатор i = obj.AddEmUp(3, 4) MsgBox (i) End Sub ' Конец
Введя этот текст, можно создать из него исполняемый файл ЕХЕ и запустить его на выполнение. В результате появится окно с сообщением, в котором будет выведен результат – число 7, показанное на рис. 15.6.
Рис. 15.6. Клиент Visual Basic для компонента .NET
Как строить и запускать исполняемый файл на Visual Basic
- File › Make Projectl.exe.
- Щелкните на ОК.
- Дважды щелкните на Project.exe в Проводнике (Windows Explorer).