COM
COM – это языконезависимая технология, позволяющая одному приложению вызывать методы другого даже если они находятся в разных процессах или на разных машинах. Разумеется, для этого вызываемое приложение должно предоставить совместимый со спецификацией COM интерфейс вызовов, т.е. быть COM-сервером. Delphi позволяет создавать такие интерфейсы, при помощи ключевого слова interface. Также Delphi содержит полный набор инструментов для быстрого создания COM-серверов, а также для написания клиентов, использующих их возможности.
Типичный сценарий взаимодействия процессов при помощи COM выглядит следующим образом:
1. | Программа, предоставляющая другим программам возможность вызывать свои функции, реализует COM-сервер, создаваемый при помощи мастера File->New->ActiveX->COM object |
2. | Затем эта программа регистрирует себя в реестре (для этого надо однократно запустить её на компьютере) |
3. | Программы, нуждающиеся в обращении к функциям, реализованным в COM-сервере запрашивают создание экземпляра сервера при помощи функции |
function CreateComObject(const ClassID: TGUID): IUnknown;
либо при помощи класса-оболочки, автоматически сгенерированного Delphi
Примером работы с COM-объектом может служить следующий код:
Code: |
uses MyComServer_TLB;
…
var MyComObject: IMyComObject; …
MyComObject := CoMyComObject.Create; … // Вызов методов IMyComObject MyComObject := NIL; // Освобождение экземпляра COM-сервера |
Остановимся подробнее на некоторых ключевых моментах приведенного примера.
MyComServer_TLB.pas – это модуль, автоматически генерируемый Delphi, при создании нового COM-объекта. Этот модуль содержит описание интерфейса (IMyComObject) и реализацию ко-класса (CoMyComObject) – специального класса-оболочки, который позволяет запросить создание COM-объекта не вдаваясь в подробности архитектуры COM. Метод Create класса CoMyComObject возвращает ссылку на интерфейс созданного экземпляра COM-сервера. Для освобождения COM-сервера из памяти необходимо присвоить ссылке на него значение NIL. При этом автоматически уменьшится значение счетчика ссылок, и, при достижении им нуля, сервер будет автоматически выгружен. Если MyComObject является локальной переменной, то сервер будет выгружен при выходе этой переменной за пределы диапазона видимости.
Dynamic Data Exchange (DDE)
DDE – механизм, поддерживаемы для обеспечения совместимости со старыми приложениями. Новые программы не должны использовать его для взаимодействия, однако, если необходимо обеспечить управление старым приложением, поддерживающим этот протокол – Delphi имеет в составе VCL компоненты для создания как DDE клиентов (TDdeClientConv, TDdeClientItem), так и серверов (TDdeServerConv, TDdeServerItem)
File Mapping
Отображение файла на память позволяет процессу рассматривать содержимое файла как часть своего адресного пространства. Если несколько процессов используют один и тот же объект отображения файла на память, то каждый из них имеет участок своего адресного пространства, синхронизируемый с аналогичным участком остальных процессов. Отображение файла на память является очень эффективным способом совместного использования данных разными процессами. Разумеется, если существует вероятность одновременного изменения этих данных несколькими процессами, должна использоваться синхронизация. Использование этого механизма уже было подробно рассмотрено при создании перехватчика клавиатуры.
Mailslots
Почтовые слоты – способ однонаправленной коммуникации. Приложение-сервер открывает слот, а клиенты могут писать в него. Слот сохраняет сообщения до тех пор, как сервер не прочтет их. Разумеется, одно приложение может быть одновременно сервером и клиентом, обеспечивая двунаправленную связь. При этом приложения могут находиться даже на разных компьютерах в сети.
Delphi не содержит компонентов для работы с почтовыми слотами, поэтому программировать их необходимо используя WinAPI
Pipes
Каналы бывают именованные и неименованные.
Неименованные или анонимные каналы обычно используются для перенаправления стандартных устройств ввода-вывода.
Именованный канал с известным именем обычно создается сервером, позволяя клиентам связываться с ним. При этом клиенты могут находиться на других компьютерах в сети. Именованный канал может быть создан только под Windows NT. Компьютеры под Windows 9x могут подключаться к каналу, но не могут создавать его сами.
RPC
RPC (Remote Procedure Call) – это API, позволяющий приложению удаленно вызывать функции в других процессах как на своём, так и на удаленном компьютере. Предоставляемая Win32 API модель RPC совместима со спецификациями Distributed Computing Environment (DCE), разработанными Open Software Foundation. Это позволяет приложениям Win32 удаленно вызывать процедуры приложений, выполняющихся на других компьютерах под другими операционными системами. RPC обеспечивают автоматическое преобразование данных между различными аппаратными и программными архитектурами.
Windows Sockets
Надстройка над коммуникационными протоколами, позволяющая писать независимые от сетевого протокола приложения, обменивающиеся данными. Спецификация WinSock 2 позволяет работать с сокетами как с обычными файлами, используя те же функции ввода-вывода.
WM_COPYDATA
Сообщение WM_COPYDATA позволяет приложениям копировать данные между их адресными пространствами. При этом приложения не обязательно должны быть 32-разрядными – для 16-разрядных приложений поддерживается автоматическая трансляция указателей.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!