Для того чтобы использовать визуальный .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#.
<Return> <Return> <SITEMAP> <MVC> <ASP> <NET> <DATA> <KIOSK> <FLEX> <SQL> <NOTES> <LINUX> <MONO> <FREEWARE> <DOCS> <ENG> <MAIL ME> <ABOUT ME> < THANKS ME> |