
- •Часть 2
- •Тема 4. Com-технологии
- •Создание com-компонентов
- •2.1. Создание ActiveX – элементов
- •Разработка ActiveX - элемента
- •Создание страниц свойств ActiveX – элемента
- •2.2. Создание ActiveX – компонентов кода
- •2.3. Создание dhtml – приложений
- •2.4. Разработка ActiveX-документа
- •Преобразование стандартного проекта в активный документ
2.2. Создание ActiveX – компонентов кода
Компоненты кода, исполняемые программы и DLL, разработанные на основе COM, являются библиотеками классов. В отличие от ActiveX-элементов, компоненты кода обычно не имеют пользовательского интерфейса. Компоненты кода предоставляют повторно используемый код в виде объектов. VB позволяет создавать компоненты кода двух типов:
внутренние – DLL-сервера. Выполняются внутри клиентского процесса в том же адресном пространстве, обеспечивают более быстрый доступ к свойствам и методам объектов. Шаблон, применяемый для создания внутренних компонентов кода, называется ActiveX DLL;
внешние – EXE-сервера. Объекты выполняются в собственном адресном пространстве. В то время как само клиентское приложение выполняет какую-либо задачу, оно может передать решение другой задачи внешнему компоненту, Внешний компонент сам известит об окончании процесса решения. Внешние компоненты кода проектируются на основе шаблона ActiveX EXE.
В данном случае клиентом является приложение, использующее COM объекты. Клиент создает экземпляры классов, предоставляемые EXE- или DLL-файлами (серверами) COM компонентов, и обращается к свойствам. Методам и событиям COM объектов.
Свойства классов реализуются процедурами:
Property Get – возвращает текущее значение свойства
Property Let – устанавливает новое значение свойства
Property Set – заменяет Property Let, когда свойство само является объектом (например, свойства Font элемента TextBox само является объектом).
Упражнение. Создание DLL-сервера ActiveX
Задача. Создать DLL-сервер ActiveX. Свойства и методы которого могут вызываться клиентским приложением. Тестирование сервера в стандартном проекте.
Создать новый проект на основе шаблона ActiveX DLL и дать ему имя MyDLL
В раздел модуля General Declarations класса Class1 ввести код:
Private UserName As String
Private strMessage As String
Public Sub SayHello()
MsgBox "Hello, " & UserName & "!"
End Sub
Public Property Let Name(Name As String)
UserName = Name
End Property
Public Property Get Message()
strMessage = "Hello from DLL!"
Message = strMessage
End Property
Прежде чем обращаться к DLL, ее, как правило, нужно сначала зарегистрировать. Но протестировать DLL в среде VB можно сразу, так как она автоматически загружается в память.
Создать тестовый проект, добавив из меню File стандартный проект.
Для стандартного проекта открыть диалог Project References
Установить флажок против MyDLL и щелкнуть OK
На форму стандартного проекта добавить кнопку с кодом на обработчик события Click():
Private Sub Command1_Click()
Dim Obj As MyDll.Class1
Dim strMessage As String
Set Obj = New Class1
Obj.Name = "Student"
Obj.SayHello
strMessage = Obj.Message
MsgBox strMessage, , "Message from DLL"
End Sub
Сделать стандартный проект стартовым
Сохранить проект как группу и выполнить его.
В результате появится два окна сообщения. Одно из них выводится методом ShowMessage DLL–сервера ActiveX (рис.26), а во втором окне отображается значение свойства Message объекта, объявленного в процедуре Command1_Click (рис.27).
Рис.26 Рис.27
Для компиляции выполнить команду FileMake MyDLL.dll…
Создание внешнего компонента ActiveX EXE выполняется аналогично. Отличаются процедуры отладки компонент. Поскольку ActiveX-компоненты кода используются в клиентских приложениях и автономно не выполняются, то отлаживать их можно одним из двух способов:
Для отладки внутренних компонентов загрузить в среду VB тестовый проект Standard EXE или ActiveX EXE вместе с проектом компонента как группу. После этого возможно пошагово выполнять нужные процедуры, перейдя из кода тестового проекта в код внутреннего компонента.
Для отладки внешнего компонента требуется загрузить два экземпляра среды VB: один – с тестовым проектом, другой – с проектом компонента.