CREATE_OBJECT


Синтаксис

CREATE_OBJECT(ProgID: STRING[];
              [ ServerName: STRING[] ];
              [ OnTerminalClient: SCAL[2] ]
             ): OBJECT;

Описание

Создает объект COM автоматизации и возвращает ссылку на него. Кокласс объекта определяется, исходя из программного идентификатора ProgID. Вместо ProgID можно указать CLSID, заключенный в фигурные скобки. На самом деле, первое, что выполнит функция - преобразует ProgID в CLSID по информации из системного реестра, а если это не удастся, выбросит исключение 140.

Необязательный флаговый параметр OnTerminalClient имеет значение только для терминального клиента ASB. По умолчанию флаг поднят, т.е. объект будет создан на стороне терминального клиента. При сброшенном флаге объект будет создан на стороне сервера приложений ASB, что небезопасно, поскольку сервер автоматизации будет выполняться на невидимом рабочем столе. Создавая и используя объект COM автоматизации на стороне сервера приложений ASB программист должен быть уверен, что сервер автоматизации не станет ожидать реакции пользователя.

Если параметр ServerName не указан или пуст, объект будет создан на локальном компьютере. В противном случае объект будет создан на удаленном компьютере с использованием технологии DCOM. В этом случае в качестве первого параметра иногда разумнее задать CLSID, поскольку на локальном компьютере (в отличие от удаленного) кокласс может быть не зарегистрирован. Как правило, на удаленном компьютере потребуется настройка DCOM при помощи dcomcnfg.exe.

Функция может быть использована в том числе для создания лицензионного объекта COM автоматизации, если соответствующая лицензия времени разработки установлена на данном компьютере (вместе со средством разработки, например Microsoft Visual Studio), или если лицензия времени исполнения встроена в клиент ASB (на данный момент таковых нет, но возможность встраивания поддержана). Если лицензии нет, будет выброшено исключение 865.

В случае неудачи функция выбрасывает исключение.

До версии 14.136.020 процедура называлась CreateOBJECT. В настоящее время допустимы оба варианта имени.

Поведение данной функции идентично поведению функции CreateObject в Visual Basic, за исключением того, разумеется, что поддерживаются только объекты COM автоматизации. Если объект не поддерживает интерфейс COM автоматизации IDispatch, функция выбросит исключение 141.

После создания объект будет подсчитывать количество ссылок на себя, и, когда число ссылок станет равным нулю (объект никому больше не нужен), например, в результате выполнения SETEMPTY, присваивания, или завершения блока программы, объект будет автоматически уничтожен. Если объект реализуется внепроцессным сервером COM, уничтожение объекта может не означать завершения работы серверного приложения; это зависит от реализации сервера. Часто применяется следующая логика: если на момент уничтожения объекта главное окно серверного приложения видимо, приложение не завершается, если невидимо - завершается.

См. также

Пример 1

VAR
 objXL: OBJECT;
BEGIN
 objXL := CREATE_OBJECT("Excel.Application");
END.

Пример 2

VAR
 objXL: OBJECT;
BEGIN
 (* Эквивалентно "Excel.Application" *)
 objXL := CREATE_OBJECT("{00024500-0000-0000-C000-000000000046}");
END.