(NET) NET (2004 год)

Связь NET-COM

Для того чтобы использовать визуальный .COM-класс (ActiveX-компонент) в .NET мы просто ставим в .NET-проекте ссылку на .COM-библиотеку, после чего ActiveX можно напрямую использовать в .NET. В некоторых случаях также приходится самому утилитой TLBIMP изготовавливать обертку (муляж) .COM-класса и ссылку в .NET проекте ставить уже на нее.


Обратная задача может быть решена как создание невизуального .COM-компонента на .NET или как создание полноценного визуального ActiveX .COM-компонента на .NET. Первую задачу можно решить либо самостоятельно (описав интерфейсы с особым атрибутом InterfaceTypeAttribute) либо доверится автоматике, самостоятельно создающей описание интерфейсов. Работает нормально и в том и в другом случае.

1.Создание простейшего невизуального COM-компонента на .NET с самостоятельным описанием интерфейсов.

2.Вместо самостоятельного описания интерфейсов .COM-класса и указания к ним атрибутов InterfaceTypeAttribute можно использовать атрибут ComClass. Студия даже сама умеет выполнять функцию TLBEXP. В итоге все работает точно так же и тоже с подсказкой.

Мы создали настолько нормальный .COM-обьект, что он работает даже в VBSCRIPT или по OACreate в среде SQL-сервера или даже в DHTML. Кроме того, созданную сборку мы можем беспрепятственно использовать и в .NET-среде. Полностью работающий тестовый проект по второму варианту можно сгрузить отсюда. Учтите, что с .NET часто бывают ошибки вот такого плана. Если посмотреть, то действительно одновременно загружено несколько версий .NET - такая ошибка обычно легко исправляется мастером.

Интересно, что атрибута <ComClass()> хватает даже для того, чтобы конструктор MSI-файла студии правильно зарегистрировал созданный TLB-файл в реестре, так что даже для при инсталляции такого приложения напрягатся не приходится.


Для создания визуального ActiveX COM-компонента надо реализовать еще ряд дополнительных интерфейсов, которые будут поддерживать работу контейнера, где лежит ActiveX-компонент как минимум - IOleClientSite, IOleInPlaceSite, IOleInPlaceFrame, и IOleContainer - теоретически я представляю себе как это сделать, но практически этого пока выполнять не приходилось...

Если у кого-то есть время этим занятся - а это было бы просто чудесно - сделать интергированную среду VB6-VB7, в которой можно не задумываясь применять шестерочные и семерочные контролы, которые мирно будут уживатся рядом на одном ToolBox'е - то для этого придется сначала посмотреть описание этих интерфейсов в MSDN и еще можно посмотреть найденный мною в инете пример реализации ActiveX-компонента на C#.




Дополнительная информация:


Comments ( )
Link to this page: //www.vb-net.com/dotnet/tour13/index.htm
< THANKS ME>