(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 ( )
<00>  <01>  <02>  <03>  <04>  <05>  <06>  <07>  <08>  <09>  <10>  <11>  <12>  <13>  <14>  <15>  <16>  <17>  <18>  <19>  <20>  <21>  <22>  <23
Link to this page: //www.vb-net.com/dotnet/tour13/index.htm
<SITEMAP>  <MVC>  <ASP>  <NET>  <DATA>  <KIOSK>  <FLEX>  <SQL>  <NOTES>  <LINUX>  <MONO>  <FREEWARE>  <DOCS>  <ENG>  <CHAT ME>  <ABOUT ME>  < THANKS ME>