Автоматизация позднего и раннего связывания в DotNet


Автоматизация позднего связывания

Для доступа клиента к серверному объекту используется переменная типа Variant. В DotNet для этих целей используется новый тип данных и новый статический метод.

Var wType:&Type;
TW,Document,Selection:TObject;
wType:=&Type.GetTypeFromId(‘Word.Application’,True);
TW:=Activator.CreateInstance(wType);
wType.InvokeMember(‘Visible’,BindingFlagsSetProperty,Nil,Nil,True);
Document:=wType.InvokeMember

Когда используются параметры, передаваемые по умолчанию, здесь всё относительно просто. В других случаях достаточно использовать перегружаемую версию InvokeMember.

Поскольку у него первым параметром фактически является массив параметров и тут можно подставлять любой тип данных. Если параметры передаются по значению, то значение надо устанавливать где-то False.

Ранее связывания

Для доступа к объекту СОМ помимо сервера библиотеки типов необходимо создать дополнительную сборку, которую называют сборкой совместимости Interlope Assembler.

Её можно создать из библиотеки типов при помощи вспомогательных классов(Delphi делает это автоматически). В меню Project достаточно выбрать Add Reference и из списка зарегистрированных добавить нужную. Будет создано всё для поддержки среды Net Framework автоматически.

Сборка совместимости может быть создана с помощью специальной утилиты TLB_Imp.exe, которая есть в среде DotNet Framework в комплекте sdk среде DotNet Framework. Если даже нет Delphi, то утилита может сделать сборку совместимости.

Сборщик совместимости содержит метаданные, которые описывают все типы, доступные в библиотеки типов сервер СОМ. Фактически это и есть оболочка Wrapper, которая позволяет управляемому коду взаимодействовать с объектом СОМ.

Удаление объекта СОМ

После того как сделали оболочку для совместимости, автоматически управление жизнью объекта передается оболочке RCW. Т.е. она теперь занимается сборкой мусора, обнуляет счётчик ссылок и уничтожает сама себя.

Сборки совместимости

Когда некоторые серверы СОМ используются многими программами (в т.ч. на разных компьютерах), то по сути может быть установлена одна сборка совместимости. Для Office XP (чтобы из Office работать с OLE Automation) сборка совместимости может быть найдена в MSDN Microsoft COM/Download List Office.asp – это сборка совместимости, чтобы из приложений ДН работать с Office, который ещё не DotNet.

Основная проблема это соответствие между типами данных, между которыми нет полного соответствия между типами, объявленными в СОМ, и типами, объявленными в DotNet. Если соответствия типов нет возникают проблемы маршалинга; если типы соответствуют проблем нет.

Пример несоответствующих типов:
В С есть Char*, её неполным аналогом является PChar в Delphi. Есть ещё тип в ДН System.String. Полной совместимости нет, поэтому могут возникать проблемы.
С типами Integer, Byte и т.п. проблем не возникает.


Комментарии запрещены.




Статистика