Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Экспорт класса Prism в COM: использование ComVisible и Guid

Delphi , Технологии , COM и DCOM

Экспорт класса Prism в COM: использование ComVisible и Guid

Введение

В мире разработки программного обеспечения часто возникает необходимость интеграции компонентов, написанных на разных языках программирования. Одним из способов такой интеграции является использование технологии COM (Component Object Model), которая позволяет компонентам, написанным на различных языках программирования, взаимодействовать друг с другом. В данной статье мы рассмотрим, как экспортировать класс, написанный на языке программирования Prism (технология, позволяющая создавать компоненты .NET, совместимые с COM), с использованием технологии COM Interop.

Проблема

Перед разработчиками стоит задача экспонирования класса, реализующего определенный интерфейс, в COM-совместимую среду. Рассмотрим пример интерфейса IFoo и класс FooImpl, реализующий этот интерфейс:

TYPE
  IFoo = public interface
    property bar: string; read;
  end;

FooImpl = class( IFoo )
private
  function GetBar: string;
public
  property bar: string; read GetBar;
end;

В данном случае интерфейс IFoo уже импортирован через TLBIMP и связан с проектом. Необходимо сделать так, чтобы данный класс был доступен для использования в COM-среде.

Решение

Для экспорта класса в COM-среду необходимо использовать атрибут ComVisible, который делает сборку и/или класс видимыми для COM. При использовании утилиты tlbexp.exe (часть .NET SDK), интерфейс будет представлен как COM-интерфейс, а класс — как CoClass для IFoo. Дополнительно можно использовать атрибут Guid, чтобы установить конкретный GUID для интерфейса и (co)классов.

Подробное описание

Шаг 1: Применение атрибута ComVisible

Для начала, необходимо применить атрибут ComVisible к сборке и классу, которые вы хотите экспортировать в COM. Это можно сделать, добавив следующие директивы в начало файла с исходным кодом класса:

{$R *.res}
unit FooUnit;

interface

uses
  System.SysUtils,
  System.Variants,
  System.Classes,
  System.Generics.Collections,
  System.Contnrs;

type
  IFoo = public interface
    property bar: string; read;
  end;

  FooImpl = class(IFoo)
  private
    function GetBar: string;
  public
    property bar: string; read GetBar;
  // Добавление атрибута ComVisible
  {$ATTRIBUTE ComVisible(True)}
  end;

Шаг 2: Установка GUID с помощью атрибута Guid

Если необходимо установить конкретный GUID для интерфейса и класса, можно использовать атрибут Guid. Это позволяет явно указать идентификатор, который будет использоваться для идентификации интерфейса и класса в COM-среде:

```pascal {$R *.res} unit FooUnit;

interface

uses System.SysUtils, System.Variants, System.Classes, System.Generics.Collections, System.Contnrs, System.SysInitUtils; // Для использования класса TGuid

type // Определение GUID для интерфейса {$DECLSPEC UID '{00000000-0000-0000-C000-000000000046}'} // IUnknown IFoo = public interface property bar: string; read; // Добавление GUID для класса {$ATTRIBUTE Guid('{00000000-0000-0000-C000-0000000000000000000000000000400000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Создано по материалам из источника по ссылке.

Экспорт класса Prism в COM: использование атрибутов ComVisible и Guid для интеграции компонентов, написанных на Prism, с COM-средой.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: COM и DCOM ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-27 01:56:19/0.0033328533172607/0