home *** CD-ROM | disk | FTP | other *** search
/ PC World Plus! (NZ) 2001 June / HDC50.iso / Runimage / Delphi50 / Doc / oleserver.int < prev    next >
Text File  |  1999-08-11  |  4KB  |  98 lines

  1. {*******************************************************}
  2. {       Borland Delphi Visual Component Library         }
  3. {       Support classes for hosting servers in IDE      }
  4. {                                                       }
  5. {       $Revision:   1.19  $                            }
  6. {       Copyright (c) 1999 Inprise Corporation          }
  7. {*******************************************************}
  8. unit OleServer;
  9.  
  10. {$R-}
  11.  
  12. interface
  13.  
  14. uses Windows, Messages, ActiveX, SysUtils, Classes, ComObj;
  15.  
  16. type
  17.   TVariantArray = Array of OleVariant;
  18.   TOleServer    = class;
  19.   TConnectKind  = (ckRunningOrNew,          // Attach to a running or create a new instance of the server
  20.                    ckNewInstance,           // Create a new instance of the server
  21.                    ckRunningInstance,       // Attach to a running instance of the server
  22.                    ckRemote,                // Bind to a remote instance of the server
  23.                    ckAttachToInterface);    // Don't bind to server, user will provide interface via 'CpnnectTo'
  24.  
  25.   TServerEventDispatch = class(TObject, IUnknown, IDispatch)
  26.   protected
  27.     { IUnknown }
  28.     function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
  29.     function _AddRef: Integer; stdcall;
  30.     function _Release: Integer; stdcall;
  31.     { IDispatch }
  32.     function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
  33.     function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
  34.     function GetIDsOfNames(const IID: TGUID; Names: Pointer;
  35.       NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
  36.     function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
  37.       Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
  38.     property Server: TOleServer;
  39.     function ServerDisconnect :Boolean;
  40.   public
  41.     constructor Create(Server: TOleServer);
  42.   end;
  43.  
  44.   PServerData = ^TServerData;
  45.   TServerData = record
  46.     ClassID: TGUID;                   // CLSID of CoClass
  47.     IntfIID: TGUID;                   // IID of default interface
  48.     EventIID: TGUID;                  // IID of default source interface
  49.     LicenseKey: Pointer;              // Pointer to license string (not implemented)
  50.     Version: Integer;                 // Version of this structure
  51.     InstanceCount: Integer;           // Instance of the Server running
  52.   end;
  53.  
  54.   TOleServer = class(TComponent, IUnknown)
  55.   protected
  56.       { IUnknown }
  57.     function QueryInterface(const IID: TGUID; out Obj): HResult; override;
  58.     function _AddRef: Integer; stdcall;
  59.     function _Release: Integer; stdcall;
  60.  
  61.     procedure Loaded; override;
  62.     procedure InitServerData; virtual; abstract;
  63.  
  64.     function  GetServer: IUnknown; virtual;
  65.  
  66.     procedure ConnectEvents(const Obj: IUnknown);
  67.     procedure DisconnectEvents(const Obj: Iunknown);
  68.     procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray); virtual;
  69.  
  70.     function  GetConnectKind: TConnectKind;
  71.     procedure SetConnectKind(ck: TConnectKind);
  72.  
  73.     function  GetAutoConnect: Boolean;
  74.     procedure SetAutoConnect(flag: Boolean);
  75.  
  76.     property  ServerData: PServerData;
  77.     property  EventDispatch: TServerEventDispatch;
  78.  
  79.   public
  80.     constructor Create(AOwner: TComponent); override;
  81.     destructor Destroy; override;
  82.  
  83.     // NOTE: If derived class is generated by TLIBIMP or ImportTypeLibraryCodeGenerator,
  84.     //       the derived class will also expose a 'ConnectTo(interface)' function.
  85.     //       You must invoke that method if you're using 'ckAttachToInterface' connection
  86.     //       kind.
  87.     procedure Connect; virtual; abstract;
  88.     procedure Disconnect; virtual; abstract;
  89.  
  90.   published
  91.     property AutoConnect: Boolean;
  92.     property ConnectKind: TConnectKind;
  93.     property RemoteMachineName: string;
  94.   end;
  95.  
  96.  
  97. implementation
  98.