COM & OLE

Сценарий Pascal может получить доступ к методам и свойствам COM (также известным как OLE или ActiveX) через поддержку объектов автоматизации COM. Это позволяет получить доступ, например, к стандартным COM-серверам Windows, настраиваемым COM-серверам, библиотекам DLL Visual Basic ActiveX и сборкам .NET через COM-взаимодействие.

COM-объекты освобождаются автоматически, когда они выходят за пределы области видимости. Нет никаких функций, чтобы «уничтожить» или «освободить» их.

COM на основе IDispatch

Есть две функции для инициализации объектов автоматизации COM на основе IDispatch: CreateOleObject и GetActiveOleObject.

Используйте CreateOleObject, чтобы создать новый COM-объект с указанным именем класса. Эта функция возвращает переменную типа Variant в случае успеха и вызывает исключение в противном случае.

Используйте GetActiveOleObject для подключения к существующему COM-объекту с указанным именем класса. Эта функция возвращает переменную типа Variant в случае успеха и вызывает исключение в противном случае. В случае некоторых программ это можно использовать для определения, запущена программа или нет.

Значение, возвращаемое CreateOleObject или GetActiveOleObject, затем можно использовать для доступа к свойствам и методам COM-объекта. Доступ осуществляется посредством «позднего связывания», что означает, что не проверяется, существуют ли методы или свойства, к которым вы пытаетесь получить доступ, до тех пор, пока программе не потребуется во время выполнения.

Чтобы получить доступ к свойству или методу, имя которого является зарезервированным словом, используйте IDispatchInvoke.

COM на основе IUnknown

Если интерфейс IDispatch не реализован объектом, можно использовать поддержку COM на основе IUnknown.

Для инициализации объектов автоматизации COM на основе IUnknown используйте CreateComObject.

Значение, возвращаемое CreateComObject, может затем использоваться для доступа к методам COM-объекта после его приведения к желаемому интерфейсу. Доступ осуществляется через «раннее связывание», что означает, что желаемый интерфейс должен быть определен в сценарии, в отличие от поддержки COM на основе IDispatch.

StringToGUID можно использовать для преобразования строкового представления GUID в «настоящий» GUID. Используйте OleCheck, чтобы проверить возвращаемые значения любого вызываемого вами метода.

Если вы копируете определение интерфейса из любого существующего исходного кода Delphi, удалите скобки вокруг строки GUID интерфейса. Также удалите все соглашения о вызовах, предполагается «stdcall». Если интерфейс содержит какие-либо функции, которые вы не будете вызывать, вы можете заменить их на фиктивные, чтобы избежать необходимости определять какие-либо используемые ими специальные типы.

Процедуры и функции

CreateComObjectФункция создает единичный экземпляр объекта COM, не инициализируя его. Используется для создания единичного экземпляра объекта на локальном или "in-process" сервере, когда известен уникальный идентификатор CLSID.
CreateOleObjectФункция создает единичный неинициализированный экземпляр объекта OLE Automation. Объект не должен представлять собой часть агрегированной (aggregation) системы. Функция используется для создания единичного экземпляра объекта на локальном или "in-process" сервере.
GetActiveOleObjectФункция возвращает ссылку на интерфейс IDispatch активного OLE-объекта указанного класса. Функция использует информацию из таблицы активных объектов OLE (OLE running object table).
IDispatchInvokeВызывает метод объекта. Используйте эту функцию для доступа к свойству или методу объекта COM Automation, имя которого совпадает с зарезервированным словом Pascal.
OleCheckПроцедура вызывает исключение, если код в параметре Result указывает на ошибку (Result<0). Используйте OleCheck, чтобы обернуть любые вызываемые вами методы COM на основе IUnknown, чтобы в случае сбоя этого метода возникло исключение.
StringToGUIDВозвращает значение в оригинальном формате CLSID, соответствующее строковому имени уникального идентификатора GUID. В случае неудачи возникает исключение.