Architecture Net



         

Унаследованный компонент на основе модели компонентных объектов Microsoft (COM)


В целях демонстрации нам потребовался действующий компонент на основе модели компонентных объектов Microsoft (COM), который и будет описан в этом разделе. Заметьте, что IDL-файл LegacyCOMServer был создан как часть проекта динамически подключаемой библиотеки VC++ 6.0 (ATL СОМ AppWizard DLL). Этот проект содержит сгенерированный Мастером создания объектов на основе библиотеки шаблонных классов ATL (ATL Object Wizard) объект LegacyCOMObj, содержащий один дуальный интерфейс без агрегирования. Этот дуальный интерфейс имеет один метод с именем AddEmUp, который принимает два входных параметра целого типа с именами i и j и один выходной параметр типа int* с именем psum.

Как создать и использовать упаковщик, вызываемый во время выполнения (Runtime Callable Wrapper, RCW)

1. Имея файл динамически подключаемой библиотеки (DLL) — сервер, построенный на основе модели компонентных объектов Microsoft (COM), — или TLB-файл, с помощью Tlbimp.exe создайте упаковщик, вызываемый во время выполнения (Runtime Callable Wrapper, RCW). Этот упаковщик позволит получить доступ из управляемого клиентского кода к компонентам на основе модели компонентных объектов Microsoft (COM).

2. С помощью Regsvr32.exe зарегистрируйте на своей машине динамически подключаемую библиотеку (DLL) сервера на основе модели компонентных объектов Microsoft (COM), если это не было сделано раньше.

3. При желании, добавьте оператор использования пространства имен в клиентскую управляемую программу на C++, чтобы можно было обращаться к классу на основе модели компонентных объектов Microsoft (COM) по его короткому имени. Это пространство имен можно найти с помощью Oleview.exe — нужно поискать имя библиотеки на сервере. Несомненно, следует также добавить в клиентскую программу фрагмент, который объявляет и вызывает методы компонента на основе модели компонентных объектов Microsoft (COM). Пример такого фрагмента мы рассмотрим немного позже.


4. Инсталлируйте сборку LegacyCOMServer.dll, если вы еще этого не сделали. Проще всего с этой целью скопировать файл LegacyCOMServer.dll в папку управляемого клиента. Теперь клиентская программа может быть скомпилирована и запущена для проверки правильности работы упаковщика, вызываемого во время выполнения (Runtime Callable Wrapper, RCW).
Если вы хотите создать проект ATL СОМ самостоятельно, но у вас нет Visual Studio 6.0, создайте новый проект на основе библиотеки шаблонных классов ATL в Visual, Studio.NET. Однако в этом случае вы обнаружите, что сгенерированный код пусковой системы радикально отличается от приведенного в нашем примере кода, который был получен с помощью Visual Studio 6.0. Например, не существует файла IDL, а вместо этого используется ключевое слово _interface (интерфейс) для определения интерфейса ILegacyCOMOb] непосредственно в файле LegacyCOMOb j . h. Кроме того, Visual C++.NET в сгенерированном коде существенно использует атрибуты, и поэтому такой код даже по виду отличается от кода на обычном Visual C++. Однако, в целях обучения использованию Tlbimp.exe для компонентов на основе модели компонентных объектов Microsoft (COM), все это не имеет существенного значения.




Содержание  Назад  Вперед