Главная » Delphi » Редактор библиотеки типов

0

Итак, был  создан  активный объект сервера, а также  его  собственная библиотека типов.  Остановимся на редакторе библиотеки типов  (Type Library Editor) Delphi 6 для активного объекта сервера DrBob42, представленном на рис. 22.3.

Рис. 22.3. для интерфейса IDrBob42

Еще раз  сохраните файлы проекта (меню  File пункт Save All). При  первом сохра нении возникнет запрос об имени модуля Unit1 (модуль, собственно содержащий ак тивный объект сервера). Здесь этот модуль назван  DrBob42ASP.pas. Затем  последует запрос на сохранение файла  DrBob42.asp, который содержит шаблон  HTML  файла ASP. Первоначально такой файл имеет следующее содержание:

<HTML>

<BODY>

<TITLE> Testing Delphi ASP </TITLE>

<CENTER>

<H3> You should see the results of your Delphi Active Server method

below </H3>

</CENTER>

<HR>

<%

Set DelphiASPObj = Server.CreateObject("D6ASP.DrBob42") DelphiASPObj.{ Здесь укажите имя метода }

%>

<HR>

</BODY>

</HTML>

Как было сказано  ранее в настоящей главе,  код ASP располагается внутри  дескрип тора  <% .. %>, в отличие от обычных дескрипторов текста  HTML  < .. >. В одном дескрипторе ASP может  находиться весь код сценария (в данном  случае две строки). Первая строка создает  экземпляр объекта DrBob42 из библиотеки ActiveX D6ASP, а вторая вызывает безымянный метод.

Второй особенностью, которую  можно  заметить на рис. 22.3, является наличие методов OnStartPage и OnEndPage интерфейса IDrBob42. Это последствие выбора параметра Page-Level Event Methods в  диалоговом окне  New Active Server Object. (Если  бы был выбран переключатель Object Context, то они  бы отсутствовали, в чемнетрудно убедиться  из листинга 22.2.) Реализация этих  методов содержится в автома тически созданном модуле  DrBob42ASP, который содержит приведенный в листин ге 22.1 исходный код активного объекта сервера.

Листинг 22.1. DrBob42ASP — исходный  код активного объекта сервера

unit DrBob42ASP;

{$WARN SYMBOL_PLATFORM OFF}

interface uses

ComObj, ActiveX, AspTlb, D6ASP_TLB, StdVcl;

type

TDrBob42 = class(TASPObject, IDrBob42)

protected

procedure OnEndPage; safecall;

procedure OnStartPage(const AScriptingContext:

IUnknown); safecall;

end; implementation uses    ComServ;

procedure TDrBob42.OnEndPage;

begin

inherited OnEndPage;

end;

procedure TDrBob42.OnStartPage(const AScriptingContext: IUnknown);

begin

inherited OnStartPage(AScriptingContext);

end;

initialization

TAutoObjectFactory.Create(ComServer, TDrBob42, Class_DrBob42, ciMultiInstance, tmApartment);

end.Прежде чем начать  добавлять другие  методы, посмотрим, как будет выглядеть ак тивный объект сервера, созданный с установленным переключателем Object Context.

К счастью, в одну библиотеку ActiveX можно  включить несколько активных объектов сервера. Поэтому  еще  раз  вызовем окно  New Active Server Object и,  указав  в поле CoClass Name имя  нового класса  Micha42, выберем, на  этот  раз,  параметр Object Context. Сохраним полученный код  в файле Micha42ASP.pas, а соответствующий файл ASP — в файле Micha42.asp.Исходный код представлен в листинге 22.2. Отличия небольшие: не хватает только событий  OnEndPage и   OnStartPage.  Но   важнее  всего   то,   что   класс   объекта TDrBob42 происходит от TASPObject, в то время  как класс объекта TMicha42 проис ходит от TASPMTSObject.

Это одно из главных  преимуществ объектов ASP в Delphi:  для создания надежных и быстродействующих объектов не обязательно знать  подробности их реализации. На чиная  с данного момента, можно  приступить к добавлению новых  функциональных возможностей в модули DrBob42ASP и Micha42ASP. Такие  объекты будут вести  себя одинаково, несмотря на то, что использовались совершенно разные технологии.

Листинг 22.2. Micha42ASP — исходный  код активного объекта сервера

unit Micha42ASP;

{$WARN SYMBOL_PLATFORM OFF}

interface uses

ComObj, ActiveX, AspTlb, D6ASP_TLB, StdVcl;

type

TMicha42 = class(TASPMTSObject, IMicha42)

end;

implementation uses ComServ; initialization

TAutoObjectFactory.Create(ComServer, TMicha42, Class_Micha42, ciMultiInstance, tmApartment);

end.

Новые методы

Настало время  добавить новые  методы  в интерфейс IDrBob42 (или  IMicha42), которые могут быть вызваны из внешнего мира (как правило, из Web страниц .asp).

Наряду  с методами OnEndPage и OnStartPage (в объектах TDrBob42), можно  оп ределить еще несколько специальных методов. Например, используя библиотеку ти пов,  можно  добавить в интерфейс IDrBob42 метод  по  имени Welcome. (Щелкните правой клавишей мыши  на узле IDrBob42 и выберите в контекстном меню  пункты New и Method).

Данный метод  может  быть  использован для отображения на экране динамическо го сообщения с приветствием. Добавив такой  метод  и обновив реализацию, можно писать  программный код  метода  TDrBob42.Welcome. Для  этого  необходимо иметь представление о внутренних объектах ASP и их функциональной поддержке средст вами Delphi  6. Подобно сценариям ASP, объекты ASP в Delphi  имеют  доступ к специ альным объектам Request и Response.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии