Разработка интегрированных прикладных программ (Меньшикова К. Г.). Разработка интегрированных прикладных программ (Меньшикова К. Г.. Методическое пособие по курсу Проектирование программного обеспечения автоматизированных систем для студентов, обучающихся по направлению Прикладная математика и информатика
Скачать 313.5 Kb.
|
2.4.Контроллер на основе библиотеки типов (Delphi)Для того чтобы правильность обращений к серверу можно было выявить уже на этапе компиляции и не допустить внесения в код контроллера незамеченных ошибок, на стороне контроллера можно создать набор классов для управления сервером. Классы строятся на основе библиотеки типов объектов предполагаемого для использования сервера. Для этого следует:
После импорта библиотеки типов создать контроллер можно двумя способами (раннее и позднее связывание). Раннее связывание (early binding) подразумевает создание в приложении-клиенте (в контроллере) таблицы виртуальных методов, аналогичной виртуальной таблице сервера. Для этого
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
Serv.Visible = Range("C6").Value (установить) Range("C6").Value = Serv.Visible (получить)
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), то программный код будет использовать библиотеку типов. |