Опрос

Что вас больше интересует?

  • игры для nokia
  • темы на телефон
  • программы на мобильный
  • обзоры мобильных телефонов


 

Какие игры вы предпочитаете?

  • игры для мальчиков
  • игры для девочек
  • драки
  • стрелялки
  • логические игры
  • спортивные


 

счетчики

Спонсор раздела:

Инициализация и деинициализация объекта автоматизации

Статьи

Для того чтобы проект Delphi приобрел возможность взаимодействия с программами Microsoft® Office (и любыми другими приложениями, поддерживающими технологию OLE-automation), прежде всего необходимо упомянуть модуль ComObj в строке uses проекта. Данный модуль нужен для обращения к функции, реализующей экземпляр объекта автоматизации:

function CreateOleObject(const ClassName: string): IDispatch;

Единственный параметр функции - название (точнее, идентификатор CLSID) класса создаваемого объекта. Например, идентификатором приложения Excel выступает строка ' Excel.Application', Visio - 'Visio.Application', Word -'Word.Application'.

©Идентификатор класса (Class Identifier, CLSID) однозначно определяет класс объекта. Эти идентификаторы зарегистрированы в системном реестре Windows: раздел: HKEY_CLASSES_ROOT ветвь: \CLSID\{...}\ ProgID

На основе вышеизложенного опишем пример инициализации:

var Word : OleVariant; begin

Word := CreateOleObject('Word.Application'); try

//операции с объектом автоматизации finally

Word := Unassigned; //освобождает переменную end;

Строка Word:=Unassigned освобождает переменную типа OleVariant. Впрочем, это необязательная операция, т. к. за уничтожение экземпляра объекта отвечает сам объект. На мой взгляд, это весьма удобно. Объект OLE-automation проверяет, сколько раз он был вызван, и если число ссылок равно нулю, самоотверженно ликвидируется. Очень похоже на процесс выгрузки из адресного пространства динамических библиотек.

Иногда вместо инициализации нового экземпляра объекта автоматизации проще подключиться к уже существующему объекту (запущенному ранее пользователем). Для этого обратитесь к методу:

function GetActiveOleObject(const ClassName: string): IDispatch;

В качестве единственного параметра передается упомянутая ранее идентифицирующая объект константа. В случае удачи (объект автоматизации действительно размещен в памяти и готов к сотрудничеству) метод вернет его интерфейс IDispatch.

var Excel : OleVariant; begin try

Excel:=GetActiveOleObject('Excel.Application'); except

MessageBoxEx(Application.Handle, PCtrarCh^ активного экземпляра EXCEL'), PChar('Ошибка'), MB_ICONERROR, Lang_Russian);

end; end;

Будьте внимательны: необходимо предвидеть потенциальную ситуацию, когда в памяти компьютера нет экземпляра вызываемого объекта. В нашем примере в этом случае просто появляется сообщение об отсутствии требуемого объекта.

Добавить комментарий


Защитный код
Обновить