Chapter 20 - Project EvtSubscriber |
Project Structure
| EvtSubscriber.dpr |
library EvtSubscriber;
uses
ComServ,
EvtSubscriber_TLB in 'EvtSubscriber_TLB.pas',
MdComEvents_TLB in 'MdComEvents_TLB.pas',
Subscriber in 'Subscriber.pas' ;
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
begin
end.
| EvtSubscriber_TLB.pas |
unit EvtSubscriber_TLB;
interface
uses ActiveX, Classes, Graphics, MdComEvents_TLB, StdVcl, Variants, Windows;
const
EvtSubscriberMajorVersion = 1;
EvtSubscriberMinorVersion = 0;
LIBID_EvtSubscriber: TGUID = '{CC4759F2-5BFD-4D5F-8B73-F251070EDADE}';
CLASS_InformSubscriber: TGUID = '{30C23917-52CC-4581-9341-81D2430B39C3}';
type
InformSubscriber = IMdInform;
CoInformSubscriber = class
class function Create: IMdInform;
class function CreateRemote(const MachineName: string): IMdInform;
end;
implementation
uses ComObj;
class function CoInformSubscriber.Create: IMdInform;
begin
Result := CreateComObject(CLASS_InformSubscriber) as IMdInform;
end;
class function CoInformSubscriber.CreateRemote(const MachineName: string): IMdInform;
begin
Result := CreateRemoteComObject(MachineName, CLASS_InformSubscriber) as IMdInform;
end;
end.
| MdComEvents_TLB.pas |
unit MdComEvents_TLB;
interface
uses ActiveX, Classes, Graphics, StdVcl, Variants, Windows;
const
MdComEventsMajorVersion = 1;
MdComEventsMinorVersion = 0;
LIBID_MdComEvents: TGUID = '{F4A80A55-914B-49EF-93B1-B42EE5E37711}';
IID_IMdInform: TGUID = '{202D2CC8-8E6C-4E96-9C14-1FAAE3920ECC}';
CLASS_MdInform: TGUID = '{0C7A44A5-CC67-4B97-9051-BFE92328EB6B}';
type
IMdInform = interface;
IMdInformDisp = dispinterface;
MdInform = IMdInform;
IMdInform = interface(IDispatch)
['{202D2CC8-8E6C-4E96-9C14-1FAAE3920ECC}']
procedure Informs(Code: Integer; const Message: WideString); safecall;
end;
IMdInformDisp = dispinterface
['{202D2CC8-8E6C-4E96-9C14-1FAAE3920ECC}']
procedure Informs(Code: Integer; const Message: WideString); dispid 1;
end;
CoMdInform = class
class function Create: IMdInform;
class function CreateRemote(const MachineName: string): IMdInform;
end;
implementation
uses ComObj;
class function CoMdInform.Create: IMdInform;
begin
Result := CreateComObject(CLASS_MdInform) as IMdInform;
end;
class function CoMdInform.CreateRemote(const MachineName: string): IMdInform;
begin
Result := CreateRemoteComObject(MachineName, CLASS_MdInform) as IMdInform;
end;
end.
| Subscriber.pas |
unit Subscriber;
interface
uses
ComObj, ActiveX, EvtSubscriber_TLB, StdVcl, MdComEvents_TLB;
type
TInformSubscriber = class(TAutoObject, IMdInform)
protected
procedure Informs(Code: Integer; const Message: WideString); safecall;
end;
implementation
uses ComServ, Dialogs, SysUtils;
procedure TInformSubscriber.Informs(Code: Integer;
const Message: WideString);
begin
ShowMessage ('Message <' + IntToStr (Code) + '>: ' + Message);
end;
initialization
TAutoObjectFactory.Create(ComServer, TInformSubscriber, Class_InformSubscriber,
ciMultiInstance, tmApartment);
end.
|
|