Архитектура Microsoft Windows для разработчиков

       

Использование динамической библиотеки 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 из другого приложения

    1. Запустите Microsoft Access, установите в первом окне переключатель Blank Database и щелкните ОК.
    2. Сохраните новую базу данных под именем Lab8.mdb в папке WA\Practice\Ch08.
    3. Когда откроется диалоговое окно базы данных, щелкните вкладку Forms и нажмите кнопку New.
    4. Выберите режим Design View и нажмите ОК.
    5. Добавьте кнопку в форму Form1.
    6. Когда появится мастер Command Button Wizard, нажмите Cancel.
    7. Добавьте метку в форму Forml.
    8. В качестве названия метки укажите слово nothing.
    9. Правой кнопкой мыши щелкните кнопку Command0 и выберите из появив шегося меню пункт Properties.
    10. Щелкните вкладку Events и выберите событие On Click.
    11. Щелкните многоточие справа от события On Click.
    12. Выберите Code Builder и нажмите ОК.
    13. В меню Tools выберите пункт References.
    14. Прокрутите список ссылок Available References, пометьте флажком пункт SampleDLL и нажмите ОК.

      В результате в код обработки события будет добавлена ссылка на библиотеку, которую Вы оставили работать в Visual Basic.

    15. . В событие CommandO_Click добавьте следующий код:

      Dim MyObject As New Classi

      MyObject.Name = InputBox("KaK Ваше имя?")


      Label"!.Caption = MyObject.Message

      MyObject.SayHello

    16. В меню Run выберите пункт Go/Continue.


    17. Нажмите кнопку CommandO.


    18. Введите свое имя и нажмите ОК.


    19. Переключитесь на Ваше приложение, работающее в Visual Basic. Появится окно сообщения, в котором указано Ваше имя.


    20. Нажмите ОК.


    21. Снова переключитесь в Microsoft Access.

      Обратите внимание, что текст метки изменился.

    22. Закройте форму Form1 и нажмите Yes, чтобы сохранить изменения. Сохраните форму под именем frmLab8.


    23. Закройте Microsoft Access.


    24. Переключитесь в Visual Basic.


    25. Остановите работу приложения и выйдите из Visual Basic. Если хотите, може те сохранить проект в папке WA\Practice\Ch08.


    26. Исполняемые компоненты ActiveX

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

      Однократно и многократно используемые компоненты

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

      Многократно используемые компоненты позволяют другим приложениям создавать объекты на основе своих классов, причем этим способом можно создать любое количество объектов. Внепроцессный компонент вправе предоставить несколько объектов разным клиентам, а внутрипроцессный компонент — несколько объектов клиенту и любым другим компонентам, работающим в рамках того же процесса. Как исполняемые компоненты, так и динамические библиотеки ActiveX при необходимости служат многократно используемыми компонентами.


      Содержание раздела