Простые типы 10 страница

};

Область памяти для хранения оценок разумнее всего выделять в конструкторе класса. Мы передадим ему количество студентов, по которому можно будет определить размеры выделяемой области. Также обратите внимание, как мы инициализируем в конструкторе индексную переменную ClassDataIndex значением 0:

#include <iostream.h>

class SchoolClass {

int *ClassData;
int ClassDataIndex;
public:
SchoolClass(int NumberStudents);
};
а SchoolClass::SchoolClass(int NumberStudents);
{

· ClassData = new int[NuinberStudents];
· ClassDataIndex = 0;

}

Память для хранения данных выделяется с помощью оператора C++ new. В данном случае выделяется область, размера которой достаточно для хранения NumberStudents целых чисел. Оператор new является встроенным оператором C++ и используется вместо таких функций С; как malloc() и саllос(). Мы неоднократно встретимся с ним.
При желании можно рассматривать выделенную область памяти как массив (в С и C++ имена массивов и указатели считаются практически синонимами). Тогда для обращения к первому целому в выделенной области можно использовать запись ClassData[0],к следующему — ClassData[1] и т.д.
Итак, мы выделили область памяти, которая будет интерпретироваться как массив, и размера которой хватает для хранения NumberStudents целых значений оценок.
Но как избавиться от, выделенной области, когда необходимость в ней отпадет? Помимо конструкторов в С++ существуют, деструкторы — они вызываются при уничтожении объекта и содержат код «сборки мусора». В нашем примере деструктор будет уничтожать выделенную ранее область памяти.

9.11.5.1. Деструкторы C++
Деструктор отчасти похож на конструктор, только он автоматически вызывается при уничтожении объекта. Между ними существует даже внешнее сходство, но имя деструктора снабжается префиксом ~ («тильда»):
#include <lostream.h>
class SchoolClass {
int *ClassData;
int ClassDataIndex;
public:
SchoolClass(int NumberStudents);
· ~SchoolClass(void);

};
SchoolClass::SchoolClass(int NumberStudents);
{
ClassData = new int[NumberStudents];
ClassDataIndex = 0;
а SchoolClass::SchoolClass(void)
а {
а }
Деструктор должен вернуть системе область памяти, выделенную при выполнении конструктора. Для оператора new существует противоположный по смыслу оператор delete, при помощи которого можно уничтожить массив:
SchoolClass::~SchoolClass(void)
{
а delet ClassData;
}
Теперь у нашего класса есть и конструктор, и деструктор, но возникает новая проблема — класс не может существовать в вакууме. Нам потребуются методы для занесения оценок в объект и последующего их получения.
Другими словами, в созданный объект класса SchoolClass необходимо записать данные и предоставить некоторые средства для работы с ними. Эта идея лежит в основе всех объектов — обычно они применяются для хранения и обработки внутренних данных.


10. Концепции технологии ActiveX

В этой главе:
Назначение технологии ActiveX
Связывание объектов
Внедрение объектов
Контейнеры и серверы
Совершенствование пользовательского интерфейса
Модель многокомпонентных объектов
Автоматизация в технологии ActiveX
Элементы управления ActiveX

10.1. Назначение технологии ActiveX
В этой главе рассматривается теория и концепция технологии ActiveX, которая построена на основе модели COM (Component Object Model — модель многокомпонентных объектов). До недавнего времени технология, построенная на основе СОМ, носила название OLE (Object Linking and Embedding— связывание и внедрение объектов), но теперь она обозначается термином ActiveX. Большинство программистов нового поколения используют OLE довольно осторожно, и замена названия на ActiveX, к несчастью, только укрепила осторожное к ней отношение. Тем не менее, если вы расцените технологию ActiveX как способ многократного использования программ, уже написанных и протестированных кем-то другим, и как защиту от необходимости самому повторно изобретать колесо в каждом новом приложении, вы поймете, что эта овчинка стоит выделки и времени на ее изучение. Наличие Developer Studio и MFC делает использование технологии ActiveX намного проще, поскольку они выполняют большую часть черновой работы, оставляя ее невидимой для вас. Часть IV состоит из пяти глав, в которых дается представление о современном состоянии технологии ActiveX.
Windows всегда обеспечивала пользователям возможность одновременного запуска нескольких приложений. И с самого начала существования этой системы программисты хотели иметь на вооружении методы, с помощью которых запущенные приложения могли бы обмениваться информацией в процессе выполнения. Прекрасной новацией стал буфер обмена Clipboard, но пользователь все еще должен был выполнять вручную многие операции. Механизм DDE (Dynamic Data Exchange— динамический обмен данными) предоставил прмттожр-ниям возможность обмена данными, но при этом сохранял некоторые серьезные ограничения. Затем появилась технология OLE 1. Позднее ее сменила OLE 2, с течением времени переименованная Microsoft просто в OLE, и, наконец, теперь она получила название ActiveX.
Опытные пользователи Windows, вероятно, хорошо знакомы с примерами, которые приводятся в начале данной главы. Если вы знаете, что именно технология ActiveX
может предложить пользователю, и интересуетесь только тем, как все это функцио-
нирует, переходите сразу к разделу Модель многокомпонентных объектов, в котором завеса таинственности будет приподнята.
Технология ActiveX дает возможность пользователю и приложениям ориентироваться на работу с документами, и это, пожалуй, самое главное. Если пользователь решает подготовить годовой отчет с помощью приложений, поддерживающих ActiveX, он может сосредоточиться именно на отчете как таковом. Вероятно, часть этой работы будет выполнена в Word, a еще некоторая ее часть — в Excel, но для пользователя суть дела заключена не в приложениях. Подобная переориентация сейчас происходит во многих направлениях и вызвано это объектно-ориентированным образом мышления большинства программистов. Ныне кажется более естественным разделить работу между несколькими различными приложениями, способными взаимодействовать между собой, чем написать одно гигантское приложение на все случаи жизни.
Вашему вниманию предлагается простой тест, способный выявить присущий вам стиль мышления — ориентацию на документы или на приложения. Как организована информация, хранящаяся на жестком диске вашего компьютера?
Структура каталогов, представленная на рис. 3.1, ориентирована на приложения: папки носят названия приложений, используемых для хранения документов. Все документы Word собраны вместе.
Структура каталогов, представленная на рис. 3.2, является документо-ориентированной: папки носят имена проектов или клиентов, документы которых хранятся в них. Все файлы о продажах собраны вместе, даже если доступ к ним осуществляется с помощью различных приложений.
Если вы достаточно долго имеете дело с персональными компьютерами, вы еще помните времена, когда приходилось работать с отдельными дискетами для программ и для данных. Вероятно, вы сможете припомнить и процедуры инсталляции программного обеспечения, в которых требовалось указать каталог, предназначенный для хранения всех файлов, созданных данным продуктом. Все это были яркие примеры подхода, ориентированного на приложения, в скором времени уступившего свои позиции документо-ориентированному подходу.
______________________________________________________________
Microsoft Office
Word
Создание приложений для Internet Использование visual C++
Acme Corp
Обучение
Web-страницы
Excel
Журнал
Продажи
Входящие
ABC Inc
Платежи
Склад
Microsoft Visual Studio
Платежи для ABC Inc
Склад для ABC Inc
Но почему? Что является ошибочным в подходе, ориентированном на приложения? А вот что: куда вы поместите документ, одинаково часто обрабатываемый двумя разными приложениями? Были времена, когда каждый программный продукт умел считывать файлы только в своем собственном формате. Но сейчас границы Между приложениями размыты. Документы, созданные в одном текстовом редакторе, 'легко' могут быть прочитаны в другом; файл с электронной таблицей может быть обработан в базе данных и т.д. Если заказчик пошлет вам документ, созданный с помощью WordPerfect, а у вас нет этого приложения, станете ли вы для хранения данного файла создавать папку с именем \WORDPERFECT\DOCS, поместите его в папку \MSOFFICE\WORD\DOCS или поступите как-то иначе? Если папки на вашем жестком диске организованы в документо-ориентированной майере, вы сможете просто поместить данный файл в папку для этого клиента.
Интерфейс Windows 95, в настоящее время встроенный и в Windows NT, ориентирован на документо-ориентированрый образ мышления, предоставляя пользователям возможность посредством двойного щелчка на документе автоматически запускать создавшее его приложение. В целом, это не ново — File Manager имеет такие возможности уже многие годы. Однако существует большая разница между двойным щелчком, выполненным на пиктограмме документа на рабочем столе и двойным щелчком на элементе в окне списка, хотя в обоих случаях следствием будет запуск соответствующего приложения. Чем дальше, Тем меньшее значение имеет, какое именно приложение (или приложения) применялось при создании документа — вам просто необходимо его просмотреть и как можно быстрее внести изменения.
Когда вы измените свой подход на документо-ориентированный, вы почувствуете притягательную силу составных документов — файлов, созданных несколькими приложениями. Если ваш отчет нуждается в иллюстрациях, вы создаете их с помощью какой-либо графической программы, а затем, когда они будут готовы, помещаете их в текст. Если в годовой отчет необходимо включить таблицу, данные для которой уже введены в электронную таблицу, не следует заново вводить и упорядочивать их, используя средства табличной обработки текстового редактора, или даже импортировать их. Поместите их в текст отчета непосредственно как фрагмент электронной таблицы. Все это, конечно, уже не ново. Даже ранние издательские системы для персональных компьютеров, такие как Ventura, умели объединять в один сложный составной документ текст и графику, получаемую из различных источников. Новизна заключатся в том, что теперь все это выполняется просто и быстро для различных приложений.
__________________________________________________________________
Клиенты
Acme Corp
Обучение
Web-страницы
Входящие
ABC Inc
Платежи
Склад
Входящие
Книги
Создание приложений для Internet
Использование Visual C++
….
Прочее
Счета
Продажи

10.2 Связывание объектов

Чтобы создать подобный документ собственными силами, выполните следующие действия.
1. Запустите Word и введите необходимый текст
2. Щелкните в том месте документа, где должна появиться таблица
3. Выберите команду Insert Object (Вставка Объект)
4. В раскрывшемся диалоговом окне выберите вкладку Create From File (Создание из файла)
5. Выберите или введите имя файла, как это делается в диалоговом окне File Open (Открытие документа)
6. Убедитесь, что флажок опции Link to File (Связь с файлом) установлен.
7. Щелкните на кнопке ОК

Рис. 3.3 Документ Microsoft Word может быть связан с файлом Excel
В вашем документе будет отображен весь файл электронной таблицы. Если в файле Excel на диске вы сделаете изменения, они будут отражены и в документе. Можно отредактировать электронную таблицу в ее собственном приложении, сделав двойной щелчок на ее изображении в документе Word. При этом для редактирования таблицы будет открыто отдельное окно Excel, как показано на рис. 3.4. Если исходный файл таблицы Excel удалить с диска, документ Word по-прежнему будет содержать ее изображение, но возможность редактирования этой таблицы будет утрачена.
Связывание в документах целесообразно в том случае, если планируется использовать связываемый файл во многих документах. При этом изменения, вносимые в файл, будут автоматически отражаться во всех документах, с которыми он был связан. Связывание не вызывает чрезмерного увеличения размеров документа, поскольку в последнем сохраняются лишь сведения о расположении связанного файла и немного дополнительной информации.

Рис. 3.4 Двойной щелчок на связанном объекте вызывает запуск приложения, в котором этотобъект был создан

10.3 Внедрение объектов
Внедрение подобно связыванию, но при внедрении создается копия объекта, которая и помещается в составной документ. Если в дальнейшем откорректировать исходный файл, изменения не будут отражены в составном документе. По внешнему виду диаграммы Excel в составном документе Word нельзя определить, связан этот объект с документом или внедрен в него. На рис. 3.5 показана электронная таблица Excel, внедренная в документ Word.
Самостоятельно создать подобный составной документ можно, выполнив следующие
действия.
1. Запустите Word и введите требуемый текст
2. Щелкните мышью там, где требуется разместить таблицу.
3. Выберите команду Insert Object.
4. В раскрывшемся диалоговом окне выберите вкладку Create From File.
5. Выберите или введите имя требуемого файла так же, как в диалоговом окне File Open.
6. Сбросьте флажок опции Link to File.
7. Щелкните на кнопке ОК.
Вы видите какие-либо отличия? Их можно будет увидеть, дважды щелкнув на внедренной объекте с целью его редактирования. Меню и панели инструментов Word исчезнут, а их место будет занято соответствующими элементами Excel, как показано на рис.3.6. Изменения, которые вы сделаете в этом документе, не затронут исходного файла, данные из которого были внедрены в документ Эти изменения коснутся только копии исходного файла, которая стала частью окумента Word.

Рис. 3.5 Файл внедренный в другой файл выглядит точно так как и файл связанный сдругим файлом

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

10.4 Контейнеры и серверы
Чтобы выполнить внедрение или связывание двух объектов, вам необходимо иметь кон-
тейнер и сервер Контейнером является приложение, в документ которого объект внедряется или с документом которого объект связывается (в приведенных выше примерах это Word) Сервером является приложение, в котором объект был создан и которое может быть запущено, когда на объекте будет сделан двойной щелчок (в нашем случае это Excel)

Рис. 3.6. Редактирование на месте используется при внедрении объектов по технологии OLE
Почему необходимо разрабатывать приложения как контейнеры ActiveX? Для сокраще-
ния объема работы, которую вам же придется выполнять. Представим, что вы уже завершили разработку приложения и передали его в эксплуатацию пользователю. С помощью этого приложения решается какая-то специфическая задача, например организация работы отдела сбыта или подготовка расписания игр в спортивной лиге, или вычисление страховых ставок. Через некоторое время пользователь обращается к вам с просьбой добавить к приложению некоторые функции, свойственные электронным таблицам, чтобы у него появилась возможность выполнять определенные вычисления непосредственно в этом приложении.
Сколько времени вам потребуется для внесения соответствующих изменений? И есть ли во
обще у вас время на изучение вопроса о том, как в программах-процессорах электронных
таблиц обрабатываются математические функции, задаваемые пользователем?
Если приложение является контейнером ActiveX, времени вообще не потребуется. Порекомендуйте пользователю внедрять или связывать его документы с файлами Excel. Если у пользователя нет собственной копии Excel, он может использовать любое другое приложение обработки электронных таблиц, поддерживающее функции сервера ActiveX.
Однако никто не ограничивает нас только использованием электронных таблиц. Что если у пользователя возникнет необходимость сделать небольшие заметки? Пусть он использует вставку документов Word. А как быть с объектами растровой графики и прочими иллюстрациями? Воспользуемся Microsoft Paint или другим более мощным графическим пакетом, если он имеется у заказчика и может работать в режиме сервера ActiveX. Нет необходимости самостоятельно разрабатывать и дополнять приложение всеми мыслимыми средствами, поскольку можно просто сделать свое приложение контейнером ActiveX, и заказчик получит возможность внедрять в создаваемые им документы все, что ему понадобится, без вашего участия.
Хорошо, ну а зачем создавать приложения-серверы ActiveX? Снова обратимся к причинам, побуждающим вас к созданию приложений-контейнеров. Многие пользователи обращаются к разработчикам с просьбой добавить в интересующее их приложение ту или иную функцию. В ответ им сообщается, что данная возможность будет доступна им уже сейчас, если они приобретут соответствующее готовое приложение — электронную таблицу, текстовый или графический редактор или еще что-нибудь, в чем нуждается этот пользователь, и что может функционировать как сервер ActiveX. Если и ваше приложение будет сервером ActiveX, оно будет пользоваться спросом у тех, кто хотел бы объединить его возможности с возможностями приложений-контейнеров.
Сервер и контейнер дают пользователю возможность создавать именно такие документы, в которых он нуждается. Данная концепция является значительным шагом в направлении создания блочного программного обеспечения и утверждения документо-ориентированного подхода в работе. И если вы хотите, чтобы создаваемые вами приложения несли на себе логотип Windows 95, они должны быть или сервером, или контейнером, или и тем, и другим одновременно. Но технология ActiveX включает в себя, помимо связывания и внедрения, еще и многое другое.

10.5 Совершенствование пользовательского интерфейса
Что если объект, который требуется внедрить, является не файлом, а лишь частью документа, уже открытого вами в данный момент? Надо полагать, вы знаете о возможности использования буфера обмена Clipboard для пересылки объектов ActiveX. Например, для вставки части электронной таблицы Excel в документ Word выполните следующие действия.
1. Запустите Excel
2. Запустите Word.
3. В окне Excel выделите ту часть информации, которую необходимо скопировать.
4. Выберите команду Edit Copy, и выделенный блок будет помещен в Clipboard.
5. Переключитесь в окно Word и выберите команду Edit Paste Special.
6. В раскрывшемся диалоговом окне установите переключатель Paste.
7. В окне списка выберите значение Microsoft Excel Worksheet.
8. Убедитесь, что флажок опции Display as Icon сброшен
9. В результате диалоговое окно должно приобрести вид, показанный на рис. 3.7.
10. Щелкните на кнопке ОК.
В результате копия части электронной таблицы будет внедрена в документ Word. Если вы установите переключатель в положение Paste Link, изменения в электронной таблице немедленно отобразятся в документе Word, а не только в случае их сохранения на диск. (Для обновления этих данных в Word вам, возможно, потребуется сделать на них щелчок.) Это будет справедливо и в том случае, если документу электронной таблицы даже не было присвоено собственное имя и он ни разу не сохранялся на диске. Попробуйте сами! Это лучше, чем записывать на диск никчемные файлы только для того, чтобы после внедрения в составной документ сразу же их удалить.

Рис. 3.7. Диалоговое окно Paste Special используется для связывания или внедрения выделенной части документа
Другой способ внедрить часть одного документа в другой — использовать технологию перетащить и опустить. Эта технология работает в самых различных контекстах. Вы делаете щелчок на чем-либо (на пиктограмме, на выделенном блоке текста, выбранном элементе списка) и, удерживая кнопку мыши в нажатом состоянии, выполняете перемещение объекта. То, на чем бьш сделан щелчок, перемещается вслед за указателем мыши, а после того как вы отпустите ее кнопку, фиксируется в новой позиции. Это действие интуитивно понятно и логично, как изменение размера или перемещение диалоговых окон, но теперь область применения этой технологии стала намного шире. Например, вот как выглядит тот же самый обмен данными между Word и Excel, выполняемый с помощью технологии перетащить и опустить.
1. Запустите Word и установите размер его окна меньше размера полного экрана.
2. Запустите Excel и установите размер его окна также меньше размера полного экрана. Лучше всего, если вам удастся так расположить на экране окна Word и Excel, чтобы они не перекрывались.
3. В окне Excel выделите с помощью мыши или клавиш управления курсором фрагмент таблицы, предназначенный для копирования.
4. Щелкните на рамке выделенного фрагмента таблицы (толстой черной линии) и оставьте кнопку мыши нажатой.
5. Перетащите фрагмент в документ Word и отпустите кнопку мыши.
Выделенный блок будет внедрен в документ Word. После выполнения на нем двойного
щелчка этот фрагмент можно будет отредактировать с помощью Excel. Перетаскивание можно применять и для перемещения или копирования выделенных фрагментов в пределах одного документа.
По умолчанию выделенный блок информации пересылается. Это означает, что из
таблицы Excel он будет удален Если вы хотите выполнить копирование, при перетаскивании удерживайте нажатой клавишу <Ctrl>, причем кнопку мыши следует от
пустить раньше клавиши <Ctrl>.
Технологию перетащить и опустить можно применять и к пиктограммам. Если на рабочем столе перетащить файл в папку, будет выполнена его реальная пересылка в указанную папку. (Если при перетаскивании держать нажатой клавишу <Ctrl>, файл будет скопирован.) Если перетащить файл на пиктограмму программы, он будет в данной программе открыт. Это очень полезное свойство, если у вас есть файлы, которые вы обрабатываете с помощью двух приложений. Например, страницы World Wide Web, являющиеся документами в формате HTML, часто создаются средствами редакторов HTML, но просматриваются с помощью броузеров World Wide Web, таких как Netscape Navigator. Если вы сделаете двойной щелчок на пиктограмме документа HTML, будет запущен броузер для его просмотра. Если вы перетащите пиктограмму документа на пиктограмму редактора HTML, данный документ будет открыт в окне указанного редактора. Реализация всех этих возможностей в повседневной работе за компьютером дает ощутимую экономию времени.
Программирование подобных функциональных возможностей в приложениях потребует
от разработчика весьма незначительных дополнительных усилий. Так почему бы не воспользоваться этим?

10.6 Модель многокомпонентных объектов
Сердцем современной технологии ActiveX является СОМ — Модель многокомпонентных объектов (Component Object Model). Это очень сложная тема, которая вполне заслуживает отдельной книги. К счастью, Microsoft Foundation Classes и Visual C++ АррWizard берут на себя основную часть черновой работы, скрывая ее от ваших глаз. А потому обсуждение этой темы в данной главе даст вам вполне достаточный объем теоретических знаний, необходимых для разработчика приложений OLE.
Модель многокомпонентных объектов является двоичным стандартом интерфейса объектов в Windows. Это означает, что выполняемый программный код (в файлах. DLL или. ЕХЕ), который описывает объект, может быть вызван на выполнение другим объектом. Даже в том случае, когда оба объекта были написаны на разных языках, они сохраняют возможность взаимодействовать между собой, используя стандарт СОМ.
Поскольку программный код, хранимый в.DLL, выполняется в том же процессе, что и
заметку вызывающая его программа, это самый быстродействующий метод взаимодействия
между приложениями. Когда два отдельных приложения взаимодействуют друг с другом по стандарту СОМ, вызовы функцийодного приложения из другого должны быть упорядочены: СОМ собирает воедино все параметры и активизирует требуемую функцию своими средствами. По этой причине сервер, выполняемый как отдельноеприложение (.ЕХЕ), работает медленнее, чем сервер, включенный в процесс (.DLL).
Но как они на самом деле взаимодействуют? Посредством интерфейсов. Интерфейс в ActiveX является набором функций или, точнее, имен функций. По сути, это класс C++, не имеющий данных и имеющий только виртуальные функции. Классы, создаваемые вами в программе, наследуют виртуальные функции от этого класса, но имеют собственный код для реализации каждой из них. (Вспомните, что класс, который наследует чисто виртуальную функцию, не наследует программного кода этой функции. Об этом более подробно сказано в приложении А.) Другие программы получат доступ к созданному вами программному коду посредством вызова этих функций. Все без исключения объекты ActiveX должны поддерживать интерфейс с именем IUnknown (и, как правило, поддерживают многие другие интерфейсы, имена которых всегда начинаются с буквы I — префикса имен интерфейсов).
Интерфейс IUnknown предназначен для единственной цели: получения доступа к другим интерфейсам. Он включает функцию, носящую имя QueryInterface(), которая получает на входе идентификатор (ID) интерфейса, а возвращает указатель на этот интерфейс в данном объекте. Все остальные интерфейсы наследуются от интерфейса IUnknown и поэтому также имеют функцию QueryInterface(), для которой вы должны разработать текст программы. И вам пришлось бы самостоятельно написать соответствующую подпрограмму, если бы не существовало библиотеки MFC. Последняя включает в себя множество макросов, которые существенно упрощают создание интерфейсов и входящих в них функций (в этом вы очень
скоро убедитесь на практике). Полное объявление интерфейса IUnknown приведено в листинге 3.1. Макросы, обеспечивающие определенную часть работы по объявлению интерфейсов, подробно здесь рассматриваться не будут. Объявление интерфейса IUnknown включает объявление трех функций. Querylnterface(), AddRef() и Release(). Последние две функции используются для отслеживания, какие приложения используют этот интерфейс в данный момент. Все три функции должны наследоваться всеми без исключения остальными интерфейсами, и реализация их должна быть представлена разработчиком интерфейса.
Листинг 3.1. Интерфейс IUnknown, определенный в файле
\DevStudio==\inc}lude\unknwn. h
interface Iunknown
{ publ ic:
BEGIN_INTERFACE
virtual HRESULT STDMETHODCALLTYPE Querylnterface(
/* [in] */ REFIID riid,
/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject) = 0;

virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0;

virtual ULONG STDMETHODCALLTYPE Release(void) = 0; END_INTERFACE

};

10.7 Автоматизация в технологии ActiveX
Сервер автоматизации ActiveX обеспечивает другим приложениям возможность заказать ему, что требуется выполнить. Он предоставляет другим приложениям свои функции и данные, именуемые в этом случае методами и свойствами Например, Microsoft Excel является сервером автоматизации ActiveX и программы, написанные на Visual C++ или Visual Basic, имеют возможность вызывать функции Excel и задавать значения свойств объектов, например ширину колонок. Все это означает, что для ваших приложений отпадает необходимость в создании языка сценариев. Если вы обеспечите возможность предоставления всех функций и свойств вашего приложения, любой язык программирования сможет стать языком сценариев для вашего приложения (если этот язык располагает средствами управления сервером автоматизации ActiveX). Пользователи и заказчики могут уже знать примененный вами язык сценариев. По сути, они будут избавлены от необходимости изучения тонкостей этого языка для создания собственных макросов и автоматизации своей работы с приложением (хотя им потребуется изучить имена методов и свойств, предоставляемых вашей программой).
Очень важным моментом, который следует учитывать при взаимодействии с объектами автоматизации ActiveX, является то, что, в этом случае одна программа всегда является управляющей. Она вызывает методы или изменяет свойства другого выполняемого приложения. Управляющее приложение носит название контроллера автоматизации ActiveX. Приложение, предоставляющее свои методы и свойства, называется сервером автоматизации ActiveX. Excel, Word и прочие программы, входящие в состав Microsoft Office, выступают как серверы автоматизации ActiveX, и ваши программы могут непосредственно использовать функции этих приложений, что дает вам возможность реально сократить время написания программ.
Например, у вас есть возможность в создаваемых приложениях для обработки блока введенного пользователем текста использовать функцию программы Word, которая вызывается командой Format Change Case (Формат Регистр). В ваших руках будет инструмент, дающий возможность отформатировать текст, переведя все его буквы в верхний или нижний регистр, расставив регистр так, как в предложении (первая буква каждого предложения заглавная, остальные — прописные) или как в заголовке (первая буква каждого слова заглавная, остальные — прописные).
Описание того, как на самом деле работает автоматизация ActiveX, значительно сложнее краткого обзора интерфейса, сделанного в предыдущем разделе. Автоматизация предусматривает использование специального интерфейса, называемого IDispatch. Он является упрощенным интерфейсом, поддержка которого обеспечивается многими языками программирования, включая и Visual Basic, в котором не используются указатели. Объявление интерфейса IDispatch приводится в листинге 3.2.
Листинг 3.2. Интерфейс IDispatch, определенный в файле \Program Fi les\ Microsoft Visual Studio\VC98\mclude\oaidl. h
MIDI__INTERFACE("00020400-0000-0000-COOO-000000000046") IDispatch: public Iunknown
{
public:
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(/* [out] */ UINT __RPC_FAR *pctinfo) = 0;
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
/* [in] */ UINT iTInfo,
/* [in] */ LCID Icid,
/* [out] */ ITypelnfo __RPC_FAR *__RPC_FAR *ppTlnfo) = 0,


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: