Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
современный фортран , Бортеньев.pdf
Скачиваний:
242
Добавлен:
26.03.2015
Размер:
2.34 Mб
Скачать

12. Конструктор модулей для объектов ActiveX

"Рабочей книги" - несколько "Рабочих листов". Создание объекта-набора "Рабочая книга" обеспечит команда

! Получаем указатель на объект "Рабочая книга" - Workbooks workbooks = $Application_GetWorkbooks(excelapp, $status = status)

Экземпляр этого объекта вернет вызов

! Открываем заданный файл. Указываем в качестве параметра имя файла Excel workbook = Workbooks_Open(workbooks, fname, $status = status)

12.2. Для чего нужен конструктор модулей

Процедуры, обеспечивающие работу с объектами ActiveX, можно разделить на две группы:

1)процедуры управления объектами. Они применяются со всеми объектами Автоматизации;

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

Процедуры первой группы реализованы в поставляемых с CVF библиотеках dfcom.lib и dfauto.lib. Для доступа к ним в CVF имеются необходимые интерфейсы. Они нужны, поскольку эти процедуры написаны на СИ. Применяемая в Фортране технология создания интерфейсов в разноязычных приложениях рассмотрена в [1].

Процедуры второй группы описаны в сопровождающей компоненты ActiveX документации. Поэтому, чтобы ими воспользоваться, нужно иметь под рукой необходимые источники информации. Однако перед программирующем на Фортране пользователем, даже имеющим необходимые сведения, возникают серьезные проблемы, связанные с обеспечением доступа к процедурам. Что опять-таки связано с тем, что они реализованы, как правило, не на Фортране.

Чтобы облегчить доступ к процедурам второй группы, с CVF

поставляется конструктор модулей Visual Fortran Module Wizard (далее -

КМ), создающий по имеющейся об объектах информации модули на Фортране, содержащие описания используемых с объектами данных и тексты процедур второй группы. (Информация о процедурах размещена в соответствующих файлах. Так, все данные об объектах Excel находятся в поставляемой с Excel библиотеке Excel8.olb.)

Далее мы рассмотрим общие для всех объектов ActiveX процедуры управления Автоматизацией и употребляемые в Автоматизации виды данных. А затем - порядок работы с КМ и разберем пример его применения.

377

О. В. Бартеньев. Современный ФОРТРАН

12.3. Интерфейсы процедур управления Автоматизацией

Интерфейсы процедур, имена которых приведены в табл. 12.1, содержатся в файле dfcom.f90. Процедуры обеспечивают инициализацию объекта ActiveX, его создание, активизацию и освобождение. Управление свойствами объекта и вызов связанных с ним методов осуществляется процедурами, приведенными в табл. 12.2. Интерфейсы к ним находятся в файле dfauto.f90.

Таблица 12.1. Процедуры, управляющие объектами ActiveX

Процедура

Назначение

Вид

 

 

 

COMAddObject

Добавляет ссылку на объект

Функция

Reference

 

типа

 

 

INTEGER(4)

COMCLSIDFrom

Передает программный идентификатор и

Подпрог-

ProgID

возвращает соответствующий идентификатор

рамма

 

класса

 

COMCLSIDFrom

Передает строку, содержащую идентификатор

То же

String

класса, и возвращает соответствующий

 

 

идентификатор класса

 

COMCreateObject

Передает идентификатор класса и создает

"

ByGUID

экземпляр объекта. Возвращает указатель на

 

 

интерфейс объекта

 

COMCreateObject

Передает программный идентификатор и

"

ByProgID

создает экземпляр объекта. Возвращает

 

 

указатель на IDispatch-интерфейс объекта

 

COMGetActiveObject

Передает идентификатор класса и возвращает

"

ByGUID

указатель на интерфейс активного в данный

 

 

момент объекта

 

COMGetActiveObject

Передает программный идентификатор и

"

ByProgID

возвращает указатель на IDispatch-интерфейс

 

 

активного в данный момент объекта

 

COMGetFileObject

Передает имя файла и возвращает указатель на

"

 

IDispatch-интерфейс объекта Автоматизации,

 

 

который может обрабатывать файл

 

COMQueryInterface

Передает идентификатор интерфейса и

"

 

возвращает указатель

 

COMReleaseObject

Освобождает объект

Функция

 

 

типа

 

 

INTEGER(4)

COMInitialize

Инициализация COM-библиотеки

Подпрог-

 

 

рамма

378

 

 

12. Конструктор модулей для объектов ActiveX

 

 

 

 

 

 

COMUninitialize

Освобождение COM-библиотеки (последняя

То же

 

 

 

вызываемая COM-подпрограмма)

 

 

Таблица 12.2. Процедуры, обеспечивающие управление свойствами объекта и вызовы его методов

Процедура

Назначение

Вид

AUTOAddArg

Передает имя параметра и значение и

Подпрог-

 

добавляет параметр в структуру данных,

рамма

 

содержащую список параметров

 

AUTOAllocate

Размещает структуру со списком параметров,

Функция

InvokeArgs

которые будут переданы родовой функции

типа

 

AUTOInvoke

INTEGER(4)

AUTODeallocate

Освобождает память, занимаемую структурой

Подпрог-

InvokeArgs

со списком параметров

рамма

AUTOGetExceptInfo

Запрашивает данные об исключении, с

То же

 

которым завершился метод

 

AUTOGetProperty

Передает имя или идентификатор свойства и

Функция

 

возвращает значение свойства объекта

типа

 

Автоматизации

INTEGER(4)

AUTOGetProperty

Передает ID-имя свойства и возвращает

То же

ByID

значение свойства объекта Автоматизации

 

AUTOGetProperty

Передает структуру со списком параметров и

"

InvokeArgs

возвращает величину свойства объекта

 

 

Автоматизации

 

AUTOInvoke

Передает имя идентификатора метода объекта

"

 

и структуру со списком параметров и

 

 

вызывает соответствующий метод

 

AUTOSetProperty

Передает имя идентификатора свойства и его

"

 

величину и устанавливает значение свойства

 

 

объекта Автоматизации

 

AUTOSetProperty

Передает ID-имя свойства и его величину и

"

ByID

устанавливает значение свойства объекта

 

 

Автоматизации

 

AUTOSetProperty

Передает структуру со списком параметров и

"

InvokeArgs

устанавливает заданное значение свойства

 

 

объекта Автоматизации

 

12.4. Идентификация объекта

Идентификация объекта ActiveX выполняется по глобальному уникальному идентификатору GUID (globally unique identifier),

определенному в файле dfwinty.f90:

379