Главная страница
Навигация по странице:

  • Раннее связывание

  • Контроллер позднего связывания

  • Разработка интегрированных прикладных программ (Меньшикова К. Г.). Разработка интегрированных прикладных программ (Меньшикова К. Г.. Методическое пособие по курсу Проектирование программного обеспечения автоматизированных систем для студентов, обучающихся по направлению Прикладная математика и информатика


    Скачать 313.5 Kb.
    НазваниеМетодическое пособие по курсу Проектирование программного обеспечения автоматизированных систем для студентов, обучающихся по направлению Прикладная математика и информатика
    АнкорРазработка интегрированных прикладных программ (Меньшикова К. Г.).doc
    Дата19.03.2019
    Размер313.5 Kb.
    Формат файлаdoc
    Имя файлаРазработка интегрированных прикладных программ (Меньшикова К. Г..doc
    ТипМетодическое пособие
    #26104
    КатегорияИнформатика. Вычислительная техника
    страница5 из 9
    1   2   3   4   5   6   7   8   9

    2.4.Контроллер на основе библиотеки типов (Delphi)


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

    • выбрать команду Project | Import Type Library…;

    • в списке открывшегося диалогового окна выбрать импортируемый сервер (в нашем случае Project_DayWeek Library);

    • снять флажок Generate Component Wrapper (внесения компонента на панель компонентов не требуется);

    • нажать кнопку Create Unit для создания файла с расширением .pas, который должен быть включен в проект контроллера. Файл содержит набор классов с теми же методами и свойства, что и объект автоматизации.

    После импорта библиотеки типов создать контроллер можно двумя способами (раннее и позднее связывание).

    Раннее связывание (early binding) подразумевает создание в приложении-клиенте (в контроллере) таблицы виртуальных методов, аналогичной виртуальной таблице сервера. Для этого

    • в модуль клиента добавить строку:
      uses Project_DayWeek_TLB;

    • в секции private класса формы (TForm1) объявить:

    Serv: IDayWeek;

    Интерфейс IDayWeek объявлен в импортируемом модуле как наследник интерфейса IDispatch, оболочкой для него является класс CoDayWeek. Для связи с сервером необходимо обратиться к методу Create этого класса (с точки зрения программы - просто создать объект класса CoDayWeek):

    if not Assigned(Serv) then Serv:=CoDayWeek.Create;

    Для разрыва связи с сервером необходимо проверить наличие ссылки на объект в переменной Serv и присвоить ей значение nil. При этом Delphi проверяет наличие ссылки на интерфейс сервера и вызывает его метод Release.

    if Assigned(Serv) then Serv:=nil;

    Остальные операторы контроллера ничем не отличаются от случая позднего связывания (отличие только в операторе проверки наличия сервера). Однако стоит обратить внимание на одну особенность, которая осталась за рамками нашего примера. При позднем связывании (без использования библиотеки типов) в коде контроллера можно было бы поместить такой оператор:

    Label1.Caption:=Serv.Visible;

    Так как компилятор при этом не проверяет правильность обращения к серверу, а для обращения используются вариантные переменные, то код работоспособен (преобразование типа происходит автоматически). В случае раннего связывания (и вообще в случае использования библиотеки типов) такое присваивание невозможно.

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

    Контроллер позднего связывания с использованием библиотеки типов будет производить синтаксическую проверку правильности обращения к свойствам и методам сервера уже на этапе компиляции. При его создании в код следует добавить видимость модулей:

    uses Project_DayWeek_TLB, ComObj;

    Переменную Serv объявить как ссылку на диспетчерский интерфейс:

    Serv: IDayWeekDisp;

    Связаться с сервером можно так:

    if not Assigned(Serv) then Serv:=CreateOLEObject
    ('Project_DayWeek.DayWeek') as IDayWeekDisp;

    Остальной код ничем не отличается от раннего связывания.

    2.5.Контоллер на VBA


    Идеальным контроллером автоматизации является Excel. Конечно, можно использовать и любое другое офисное приложение, однако удобнее и быстрее всего осуществить проверку работоспособности сервера можно именно в Excel.

    Для проверки сервера можно на рабочий лист рабочей книги поместить кнопки, как это показано на рис. 4, подготовить текст (жирный шрифт) и ввести дату в ячейку “F10”. Затем перейти в редактор Visual Basic и создать обработчики для кнопок.

    Для организации позднего связывания можно просто объявить переменную – объект для связи с сервером: Dim Serv As Object

    Остальной код будет выглядеть так:

    • создание объекта автоматизации

    Set Serv = CreateObject("Project_DayWeek.DayWeek")


    Рис. 4

    • прерывание связи Set Serv = Nothing

    • работа со свойством Visible

    Serv.Visible = Range("C6").Value (установить)
    Range("C6").Value = Serv.Visible (получить)

    • для получения данных придется объявить специальные переменные: Dim str As String

    Call Serv.Today(str)
    Range("G5").Value = str

    • для передачи значения можно использовать ячейки рабочего листа:

    Dim i As Long
    Dim str As String
    Call Serv.Data_Day(Range("F10").Value, i, str)
    Range("H10").Value = i
    Range("G10").Value = str

    Для использования библиотеки типов пользователь или автор рабочей книги, войдя в редактор Visual Basic, должен выбрать в меню команду Tools | References…, а в появившемся списке установить флажок на Project_DayWeek Library (список всех библиотек типов Excel считывает при загрузке из раздела реестра TypeLib). После этого пользователь может просматривать методы и свойства сервера, выбрав в меню команду View | Object Browser.

    Если после этого объявить переменную Serv, как ссылку на соответствующий интерфейс (Dim Serv As IDayWeek), то программный код будет использовать библиотеку типов.
    1   2   3   4   5   6   7   8   9


    написать администратору сайта