Кодовые компоненты ActiveX
(Продолжительность занятия 25 минут)
Кодовые компоненты ActiveX (ранее — OLE-серверы) — это библиотеки объектов, реализующие простой метод повторного использования кода. Библиотеки процедур могут использоваться и в других приложениях (например, Microsoft Office), в состав которых входит Microsoft Visual Basic for Applications. На этом занятии Вы узнаете о двух методах реализации кодовых компонентов ActiveX.
Изучив материал этого занятия,
Вы сможете:
- описать два способа реализации
кодовых компонентов ActiveX; - создать динамическую библиотеку ActiveX средствами Visual Basic и воспользоваться ею в другом приложении;
- объяснить, как работает исполняемый файл ActiveX;
- описать сходства и различия однократно и многократно используемых компонентов.
Автоматизация и ActiveX
Компоненты кода ActiveX предоставляют свои функциональные возможности приложениям-клиентам посредством OLE-автоматизации (OLE Automation). Клиентская программа использует код компонента, создавая объекты и обращаясь к их свойствам и методам; необходимые клиенту функциональные возможности обеспечивает компонент-сервер (рис. 8.3). Некоторые компоненты, в том числе и Microsoft Access, могут работать в обоих качествах: и как клиент, и как сервер. Однако чаще всего отдельно взятый компонент не способен одновременно исполнять обе роли.
Автоматизация позволяет одному приложению манипулировать объектами другого приложения. Она основана на модели многокомпонентного объекта (Component Object Model, СОМ), способного предоставлять свои функции другим объектам или приложениям. Подобная «прозрачность» позволяет клиентам непосредственно обращаться к объектам и применять их инструментарий. Например, текстовый процессор «открывает» свои функции проверки орфографии, чтобы ими могли пользоваться другие программы. Тем самым посредством автоматизации разработчики вправе расширять возможности своих программ за счет уже готовых функций других приложений.
Автоматизация позволяет интегрировать два или более компонентов так, что для пользователя они будут выглядеть как единое целое. В результате с ними и можно работать как с одним объектом, поскольку нет никаких ограничений на запрос и установку свойств объекта-сервера и применение его методов.
Рис.8.3 Принцип работы кодовых компонентов ActiveX
Динамические библиотеки ActiveX
Компонент может работать как в пределах процесса (in-process), так и вне его (out-of-process). Внутрипроцессный компонент — динамическая библиотека ActiveX — выполняется в рамках процесса другого приложения. В качестве клиента может выступать как внешнее приложение, так и другой Внутрипроцессный компонент, используемый приложением. Все элементы управления ActiveX являются внутрипроцессными компонентами.
Использование динамической библиотеки ActiveX
В этом упражнении Вы создадите динамическую библиотеку на Visual Basic, а затем воспользуетесь ею для создания объекта в Microsoft Access.
> Создание DLL на Visual Basic
- Создайте в Visual Basic новый проект типа ActiveX DLL.
- Присвойте ему имя SampleDLL.
- В разделе General Declarations
модуля Class1 введите следующий код:
Private UserName As String
Private strMessage As String
Public Sub SayHello()
MsgBox "Привет " & UserName & "!"
End Sub
Public Property Let Name(Name As String)
UserName = Name
End Property
Public Property Get Message()
strMessage = "Привет из DLL".
Message = strMessage
End Property
- Запустите приложение.
Примечание. Обычно перед
вызовом библиотеку нужно зарегистрировать. Оставив же ее выполняться (в среде
Visual Basic), Вы сможете протестировать ее без регистрации, поскольку она уже
загружена.
> Использование DLL из другого приложения
- Запустите Microsoft Access, установите в первом окне переключатель Blank Database и щелкните ОК.
- Сохраните новую базу данных под именем Lab8.mdb в папке WA\Practice\Ch08.
- Когда откроется диалоговое окно базы данных, щелкните вкладку Forms и нажмите кнопку New.
- Выберите режим Design View и нажмите ОК.
- Добавьте кнопку в форму Form1.
- Когда появится мастер Command Button Wizard, нажмите Cancel.
- Добавьте метку в форму Forml.
- В качестве названия метки укажите слово nothing.
- Правой кнопкой мыши щелкните кнопку Command0 и выберите из появив шегося меню пункт Properties.
- Щелкните вкладку Events и выберите событие On Click.
- Щелкните многоточие справа от события On Click.
- Выберите Code Builder и нажмите ОК.
- В меню Tools выберите пункт References.
- Прокрутите список ссылок
Available References, пометьте флажком пункт SampleDLL и нажмите
ОК.
В результате в код обработки события будет добавлена ссылка на библиотеку, которую Вы оставили работать в Visual Basic.
- . В событие CommandO_Click
добавьте следующий код:
Dim MyObject As New Classi
MyObject.Name = InputBox("KaK Ваше имя?")
Label"!.Caption = MyObject.Message
MyObject.SayHello
- В меню Run выберите пункт Go/Continue.
- Нажмите кнопку CommandO.
- Введите свое имя и нажмите ОК.
- Переключитесь на Ваше приложение, работающее в Visual Basic. Появится окно сообщения, в котором указано Ваше имя.
- Нажмите ОК.
- Снова переключитесь
в Microsoft Access.
Обратите внимание, что текст метки изменился.
- Закройте форму Form1 и нажмите Yes, чтобы сохранить изменения. Сохраните форму под именем frmLab8.
- Закройте Microsoft Access.
- Переключитесь в Visual Basic.
- Остановите работу приложения и выйдите из Visual Basic. Если хотите, може те сохранить проект в папке WA\Practice\Ch08.
Исполняемые компоненты ActiveX
Исполняемые компоненты ActiveX работают в своем адресном пространстве, а их клиентами обычно являются приложения, работающие в рамках другого процесса. Так как внепроцессные компоненты реализуются в своем процессе, клиент может сделать запрос серверу и продолжить свою работу, пока компонент-сервер будет выполнять запрос. При правильной настройке подобной системы компонент посылает асинхронное сообщение клиенту, чтобы уведомить того о выполнении порученной ему работы.
Однократно и многократно используемые компоненты
Однократно используемые компоненты позволяют другим приложениям создавать объекты, причем каждый из них при этом является новым экземпляром компонента. В роли однократно используемых компонентов могут выступать только исполняемые файлы ActiveX, тогда как динамические библиотеки ActiveX всегда служат многократно используемыми компонентами.
Многократно используемые компоненты позволяют другим приложениям создавать объекты на основе своих классов, причем этим способом можно создать любое количество объектов. Внепроцессный компонент вправе предоставить несколько объектов разным клиентам, а внутрипроцессный компонент — несколько объектов клиенту и любым другим компонентам, работающим в рамках того же процесса. Как исполняемые компоненты, так и динамические библиотеки ActiveX при необходимости служат многократно используемыми компонентами.
Резюме
Кодовые компоненты ActiveX — это библиотеки объектов, предлагающие простой метод повторного использования кода. Они предоставляют свои функциональные возможности приложениям-клиентам посредством OLE-автоматизации. Автоматизация обеспечивает одному приложению возможность манипулировать объектами, реализованными в другом приложении. Компоненты бывают внутрипроцессными и внепроцессными. Первые — динамические библиотеки ActiveX — выполняются в процессе другого приложения, тогда как исполняемый файл ActiveX работает в своем адресном пространстве.