Распределенные приложения: контроллеры автоматизации. Часть 2. Фертиков В.В. - 29 стр.

UptoLike

Составители: 

29
[propget, id(0x000000C5), helpcontext(0x000100C5)]
HRESULT _stdcall Range([in] VARIANT Cell1,
[in, optional] VARIANT Cell2, [out, retval] Range **RHS);
...
};
Как видите, оба эти свойства возвращают значения одного и того же типа.
При этом , для того, чтобы использовать значение Cells как указатель на кол -
лекцию ячеек, необходимо явное применение двумерного векторного свойства
Item. Здесь не проходит «трюк» , который мы использовали в программе с
Variant:
Sheet.Cells[2,i+2].Value:=Table1.Fields.Fields[i].FieldName;
Такая конструкция не предусмотрена библиотекой типов, но допустима при ис-
пользовании механизма динамического связывания.
Свойство Range имеет два входных параметра, из которых последний
необязательный . Мы в своей программе используем оба варианта: как с явным
заданием второго параметра, так и с его пропуском, указав EmptyParam вместо
него.
Импортирование библиотеки типов в проект C++Builder
Среда программирования C++Builder реализует все описанные выше воз-
можности по использованию библиотеки типов в целях создания контроллеров
автоматизации с ранним связыванием . Помимо основных преимуществ, связан -
ных собственно с использованием раннего связывания, в данном случае полу-
чается гораздо более компактный и удобочитаемый исходный код : отпадает не-
обходимость в многочисленных вызовах методов класса Variant
OleProcedure, OleFunction, OlePropertyGet, OlePropertySet и т.п.
Как уже говорилось , разработчики C++Builder для реализации возможно-
сти COM-программирования везде, где это возможно, обходятся стандартными
средствами языка C++, избегая расширения стандарта в угоду упрощению син -
таксиса. В результате ими написано огромное количество программного обес-
печения на C++, облегчающего COM-программирование. Причем оно открыто
для понимания программисту, использующему соответствующие заголовочные
файлы. В этом смысле программист на C++ находится в более выгодном поло-
жении, нежели программист на Object Pascal.
Теперь приступим к решению поставленной задачи конкретно, создадим
клиентское приложение, использующее импорт библиотеки типов. Все подго-
товительные процедуры описаны в предыдущих разделах . Так же, как в среде
Delphi, можно открыть библиотеку типов в редакторе и просмотреть ее содер -
жимое. Если библиотека типов Microsoft Excel, поставляемая в файле
excel9.olb, Вами уже изучена в достаточной степени, можно переходить к
процедуре ее импортирования в состав проекта. В результате импорта, в проект
будет добавлен модуль Excel_TLB.cpp с заголовочным файлом
Excel_TLB.h. Инструмент Class Explorer поможет Вам в поиске нужных
                              29
  [propget, id(0x000000C5), helpcontext(0x000100C5)]
  HRESULT _stdcall Range([in] VARIANT Cell1,
    [in, optional] VARIANT Cell2, [out, retval] Range **RHS);
     ...
};

      Как видите, оба эти свойства возвращают значения одного и того же типа.
При этом, для того, чтобы использовать значение Cells как указатель на кол-
лекцию ячеек, необходимо явное применение двумерного векторного свойства
Item . Здесь не проходит «трюк», который мы использовали в программе с
Variant :

Sheet.Cells[2,i+2].Value:=Table1.Fields.Fields[i].FieldName;

Такая конструкция не предусмотрена библиотекой типов, но допустима при ис-
пользовании механизма динамического связывания.
      Свойство Range имеет два входных параметра, из которых последний –
необязательный. Мы в своей программе используем оба варианта: как с явным
заданием второго параметра, так и с его пропуском, указав EmptyParam вместо
него.

      Импортирование библиотеки типов в проект C++Builder
      Среда программирования C++Builder реализует все описанные выше воз-
можности по использованию библиотеки типов в целях создания контроллеров
автоматизации с ранним связыванием. Помимо основных преимуществ, связан-
ных собственно с использованием раннего связывания, в данном случае полу-
чается гораздо более компактный и удобочитаемый исходный код: отпадает не-
обходимость в многочисленных вызовах методов класса Variant
OleProcedure , OleFunction , OlePropertyGet , OlePropertySet и т.п.
      Как уже говорилось, разработчики C++Builder для реализации возможно-
сти COM-программирования везде, где это возможно, обходятся стандартными
средствами языка C++, избегая расширения стандарта в угоду упрощению син-
таксиса. В результате ими написано огромное количество программного обес-
печения на C++, облегчающего COM-программирование. Причем оно открыто
для понимания программисту, использующему соответствующие заголовочные
файлы. В этом смысле программист на C++ находится в более выгодном поло-
жении, нежели программист на Object Pascal.
      Теперь приступим к решению поставленной задачи конкретно, создадим
клиентское приложение, использующее импорт библиотеки типов. Все подго-
товительные процедуры описаны в предыдущих разделах. Так же, как в среде
Delphi, можно открыть библиотеку типов в редакторе и просмотреть ее содер-
жимое. Если библиотека типов Microsoft Excel, поставляемая в файле
excel9.olb , Вами уже изучена в достаточной степени, можно переходить к
процедуре ее импортирования в состав проекта. В результате импорта, в проект
будет добавлен модуль Excel_TLB.cpp с заголовочным файлом
Excel_TLB.h . Инструмент Class Explorer поможет Вам в поиске нужных