Использование COMпонентов при помощи .NET

Автор: Алексей Дубовцев
Опубликовано: 13.11.2001
Версия текста: 1.0

Исходники к статье - Sourcе.zip (3K)

Использование компонентов COM при помощи .NET, является, вообщем-то, задачей тривиальной. Основной проблемой является то, что COM хранит информацию о типах в библиотеках типов (tlb),а .NET хранит её в метаданных внутри сборок. Для того чтобы использовать некоторый компонент COM, нам предстоит создать для него сборку с метаданными, описывающими типы данного компонента. Для этого мы воспользуемся утилитой Tlbimp.exe, которая позволяет создавать сборки с описаниями типов из обычных компонентов COM. Для этой статьи я выбрал весьма интересный компонент, который располагается в библиотеке Shell32.dll в системной директории Windows. Вы, наверное, узнали библиотеку, в которой расположены сервисы оболочки Windows. Эта библиотека предоставляет несколько интерфейсов, которые позволяют управлять оболочкой. Ими-то мы с вами и воспользуемся. Для начала "достанем" описания типов из этой библиотеки и поместим их в сборку. А сделаем мы это так:

tlbimp.exe Shell32.dll /out:Shell32.dll

Теперь у нас есть сборка, которую мы будем использовать для взаимодействия с компонентом. Взгляните на код, который будет вызывать COM-компонент.

Для языка IL сборка подключается не из командной строки, а при помощи модификатора extren для ключевого слова .assembly. (То есть: .assembly extern Shell32)

Видите, как все просто. Надо только не забыть сделать ссылку на сборку, в которой храниться описание нашего с вами компонента (Shell32). Если вы используете IDE, то вам необходимо выбрать пункт меню Project->AddReference... (рис. 1) или щелкнуть правой кнопкой мыши в SolutionExplorer на вашем проекте, выбрать пункт AddReference... (рис. 2) и добавить ссылку на сборку.


Рис 1


Рис 2

Директивой using мы подключаем пространство имен компонента, после чего мы можем использовать любой класс, находящийся внутри него, как обычный класс .NET. В примере я выбрал класс Shell, это один из достаточно интересных классов, предоставляемых оболочкой. Вы можете изучить его, используя Platform SDK или команду View->Otherwindows->ObjectsBrowser. Я вызываю функцию, действие которой эквивалентно выбору пункта меню Start->Run оболочки Windows.

В этой статье я показал вам, как легко можно использовать компоненты COM из среды .NET. Но это работает лишь в случае полного благоприятствования, то есть когда у нас есть библиотека типов компонента и когда сам компонент правильно написан. В ином случае нам придется самостоятельно написать заглушку для COM-интерфейса, что является далеко не простой задачей. Как это сделать, читайте в следующей статье.


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.