Удаленные модули данных. Удаленный модуль данных для сервера Автоматизации.
Листинг 21.2. Вновь созданная библиотека типов для сервера приложения с исходным кодом интерфейса удаленного модуля данных.
LIBID_SimpleAppSrvr: TGUID='(93577575-OF4F-43B5-9FBE-A5745128D9A4}'; IID_ISimpleRDM: TGUID = '{Е2СВЕВСВ-1950-4054-В823-62906306Е840}'; CLASS_SimpleRDM: TGUID = '{DB6A6463-5F61-485F-8F23-EC6622091908}'; type ISimpleRDM = interface; ISimpleRDMDisp = dispinterface; SimpleRDM = ISimpleRDM; ISimpleRDM = interface(lAppServer) ['{E2CBEBCB-1950-4054-B823-62906306E840}'] end; ISimpleRDMDisp = dispinterface ['{E2CBEBCB-1950-4054-B823-62906306E840}'] function AS_ApplyUpdates(const ProviderName: WideString; Delta: OleVariant; MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: OleVariant): OleVariant; dispid 20000000; function AS_GetRecords(const ProviderName: WideString; Count: Integer; out RecsOut: Integer; Options: Integer; const CommandText: WideString; var Params: OleVariant; var OwnerData: OleVariant): OleVariant; dispid 20000001; function AS_DataRequest(const ProviderName: WideString; Data: OleVariant): OleVariant; dispid 20000002; function AS_GetProviderNames: OleVariant; dispid 20000003; function AS_GetParams(const ProviderName: WideString; var OwnerData: OleVariant): OleVariant; dispid 20000004; function AS_RowRequest(const ProviderName: WideString; Row: OleVariant; RequestType: Integer; var OwnerData: OleVariant): OleVariant; dispid 20000005; procedure AS_Execute(const ProviderName: WideString; const CommandText: WideString; var Params: OleVariant; var OwnerData: OleVariant); dispid 20000006; end; CoSimpleRDM = class class function Create: ISimpleRDM; class function CreateRemote(const MachineName: string): ISimpleRDM; end; imp1ementation uses ComObj; class function CoSimpleRDM.Create: ISimpleRDM; begin Result: = CreateComObject(CLASS_SimpleRDM) as ISimpleRDM; end; class function CoSimpleRDM.CreateRemote(const MachineName: string): ISimpleRDM; begin Result: = CreateRemoteComObject(MachineName, CLASS_SimpleRDM) as ISimpleRDM; end; end.
Обратите внимание, что интерфейс ISimpleRDM является потомком интерфейса IAppServer, рассмотренного выше.
Так как удаленный модуль данных реализует сервер Автоматизации, дополнительно к основному дуальному интерфейсу ISimpleRDM автоматически создан интерфейс диспетчеризации isimpleRDMDisp. При этом для интерфейса диспетчеризации созданы методы, соответствующие методам интерфейса IAppServer.
Класс coSimpleRDM обеспечивает создание СОМ-объектов, поддерживающих использование интерфейса. Для него автоматически созданы два метода класса.
Метод:
class function Create: ISimpleRDM;
…используется при работе с локальным и внутренним сервером (in process).
Метод:
class function CreateRemote(const MachineName: string): ISimpleRDM;
…используется в удаленном сервере.
Оба метода возвращают ссылку на интерфейс ISimpleRDM.
Теперь, если проект с созданным модулем данных сохранить и зарегистрировать, он станет доступен в удаленных клиентских приложениях как сервер приложения.
После создания удаленный модуль данных становится платформой для размещения компонентов доступа к данным и компонентов провайдеров (см. гл. 20), которые, наряду с модулем данных, реализуют основные функции сервера приложения.