Алексей Алексеев Добро пожаловать в мой уютненький бложек

Создание и регистрация COM-объекта из NET-сборки

Сделать NET-сборку видимой как COM-объект большого труда не составляет, однако есть несколько не очевидных моментов,которые могут отнять достаточное количество времени.

Сразу стоит заметить,что для интересующихся данной темой подробно и строго следует порекомендовать книгу  А Дубовцева "Microsoft.NET Наиболее полное руководство", в которой подробно изложен данный процесс, а также другие весьма полезные вещи. В данной же процесс будет описан вкратце.

Итак, начать следует с создания библиотеки классов.  На приведенном ниже рисунке показано создание библиотеки классов в  MS VS 2008 на языке C#

После в проекте можно создавать любые классы, реализующие необходимую логику. Однако же  для корректного отображения в пространстве COM-объектов необходимо назначить каждому классу  атрибуты. Перечислим их:

[ComVisible(true), ProgId("ПространствоИмен.ИмяКласса"), Guid("УникальныйИдентификатор"), ClassInterface(ClassInterfaceType.AutoDispatch)]

Так же желательно подписать всю сборку строгим именем (по той причине, что она помещается в GAC в обязательном порядке), сделать это можно с помощью атрибута

[assembly: AssemblyKeyFile("ИмяФайлаПарыКлючей.snk")]

Естественно, пара ключей должна быть создана предварительно.

Стоит отметить, что файл манифеста так же должен содержать атрибут

ComVisible(true) примерно в таком виде:

// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми
// для COM-компонентов.  Если требуется обратиться к типу в этой сборке через
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
[assembly: ComVisible(true)]

Стоит напомнить, что все экспортируемые классы должны содержать конструктор по умолчанию. Если у класса такового не будет,  как  COM-объект он не  зарегистрируется!

Опишем процесс регистрации. Вообще говоря существуют разные пути,  зарегистрировать сборку как СОМ-объект, здесь опишем простейший. Создадим bat-файл следующего содержания:

 @ECHO OFF

REM The following directory is for .NET 4.0
set DOTNETFX4=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX4%

echo ---------------------------------------------------
regasm.exe ИмяБиблиотеки.dll /codebase
ngen.exe ИмяБиблиотеки.dll
echo ---------------------------------------------------
echo Done.

Проверить, зарегистрированы ли классы сборки в качестве  COM-объектов можно с помощью поиска соответствующих записей в реестре или с помощью утилиты oleview.exe, как это показано ниже

Сборка с именем nlbrd  в реестре, показана запись для клаксса BRIDGE.

То же самое но в oleview.exe

Если все указанные пункты выполнены верно, NET-сборка теперь будет одновременно и СОМ-объектом.

Автор: Тимофеев Александр

Комментарии (1) Пинги (1)
  1. Nowadays, with all the rapidly life style that everyone leads, bank cards have a big need throughout the economy. Folks coming from every single area of life are choosing credit card and those that not while using credit cards have made up their minds to apply for just one. Appreciate your sharing your thinking about cards.


Оставить комментарий