Библиотека программиста

«Программирование, как и любовь - это одно слово, за которым скрывается бесчисленное множество занятий»

Главная страница > Технология COM > 51. Разработка клиентских приложений

51. Разработка клиентских приложений

Разработка клиентского приложения. Создать новое ("обычное") приложение, добавить в него созданный ранее модуль библиотеки типов (в нашем примере это SimpleCOM_TLB.pas). Это приложение будет выполнять роль клиентского приложения, использующего разработанный выше сервер. В предложение uses модуля проекта-клиента необходимо добавить модуль библиотеки типов (SimpleCOM_TLB.pas).

В класс формы добавить интерфейсы, например, следующим образом:

type

TMainForm = class(TForm)

public

Interface1 : ISmpCOM;

Interface2 : ISmpCOM2;

end;

Добавить обработчик события OnFormShow:

procedure TMainForm.FormShow(Sender: TObject);

begin

Interface1:=CoSmpCOM.Create; {для первого интерфейса только}

Interface1.QueryInterface(ISmpCOM2,Interface2); {для второго и

всех других интерфейсов}

end;

Теперь в том месте, где вы сочтете нужным, можно вызывать (функциональные) методы СОМ объекта таким образом:

Interface1.Имя_Метода(фактические_параметры)

Теперь приложение можно компилировать и выполнять.

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

Для регистрации объекта необходимо выполнить (в Delphi) команду меню Run|Register ActiveX Server, а для разрегистрации – команду Run|Unregister ActiveX Server. При выполнении этих команд вызываются процедуры DllRegisterServer и DllUnregisterServer, экспортируемые библиотекой DLL.

При создании экземпляра СОМ объекта целесообразно добавить код, проверяющий результат вызова конструктора сокласса, например, такой:

procedure TMainForm.FormShow(Sender: TObject);

begin

try

Interface1:=CoSmpCOM.Create;

except

MessageDlg(

'Не удается запустить сервер SimpleCOM.dll.'+

' Убедитесь в том, что сервер зарегистрирован с помощью команды' +

' RegSvr32 путь\SimpleCOM.dll',

mtError, [mbOk], 0);

Close;

end;

Interface1.QueryInterface(ISmpCOM2,Interface2);

end;

Отладка внутрипроцессных серверов. Для отладки серверов, выполненных в виде DLL библиотек, необходимо:

Ø открыть и откомпилировать проект сервера;

Ø установить в требуемом месте контрольную точку;

Ø в меню Delphi Run/Parameters на странице Local в окне Host Application указать имя exe-файла клиентского приложения и нажать кнопку ОК (не Load). Клиентское приложение должно быть откомпилировано и построено;

Ø начать отладку, выполнив команду Run, F7 или F8. Файл проекта клиентского приложения загружать не нужно.

Контрольную точку желательно установить в секции инициализации главного модуля библиотеки – на вызове метода TTypedComObjectFactory.Create (в случае использования библиотеки типов) или TTComObjectFactory.Create (без использования библиотеки типов). ( В Delphi 5 запуск отладки с помощью трассировки F7 или F8 почему-то не удается, а в Delphi 6 – да.)

При выполнении команды Run вначале будет запущено клиентское приложение (не в режиме отладки) и, когда его выполнение дойдет до точки вызова конструктора сокласса (Со_имя_СОМ_объекта.Create), состоится загрузка сервера, т.е. отлаживаемой библиотеки DLL, и будет выполнен останов в контрольной точке.

Для просмотра последовательности загрузки всех библиотек, в том числе системных, удобно использовать средство отладчика, запускаемое с помощью команды меню View/Debug Windows/Event Log. Вот пример содержимого этого окна с некоторыми сокращениями (для Windows 95):

Process Start: …\Client.exe. Base Address: $00400000. Process Client.exe ($FFF53AE5)

Module Load: Client.exe. No Debug Info.

Module Load: COMCTL32.dll. No Debug Info.

Module Load: ole32.dll. No Debug Info.

Module Load: OLEAUT32.dll. No Debug Info.

Module Load: ADVAPI32.dll. No Debug Info.Module Load: GDI32.dll. No Debug Info.

Module Load: USER32.dll. No Debug Info.

Module Load: KERNEL32.dll. No Debug Info.

Module Load: ShellHook.dll. No Debug Info.

Module Load: OLEPRO32.DLL. No Debug Info.

Module Load: SimpleCOM.dll. Has Debug Info.

Module Load: LvHook.dll. No Debug Info.

Module Unload: OLEPRO32.DLL.

Module Unload: SimpleCOM.dll.

Process Exit: …\Client.exe.

Module Unload: Client.exe.

Module Unload: COMCTL32.dll.

Module Unload: ole32.dll.

Module Unload: OLEAUT32.dll.

Module Unload: ADVAPI32.dll.

Module Unload: GDI32.dll.

Module Unload: USER32.dll.

Module Unload: KERNEL32.dll.

Module Unload: ShellHook.dll.

Module Unload: LvHook.dll.





<< Предыдущая статья
«50. Последовательность создания простого COM объекта в Delphi»
Следующая статья >>
52. Импорт библиотеки типов