1. 程式人生 > >Delphi 封裝(4)-物理上的封裝-物理封裝和動態鏈接

Delphi 封裝(4)-物理上的封裝-物理封裝和動態鏈接

ole nts ref pre fine provide imp mach ive

技術分享圖片

unit DemoSvr_TLB;

// ************************************************************************ //
// WARNING                                                                    
// -------                                                                    
// The types declared in this file were generated from data read from a       
// Type Library. If this type library is explicitly or indirectly (via // another type library referring to this type library) re-imported, or the // ‘Refresh‘ command of the Type Library Editor activated while editing the // Type Library, the contents of this file will be regenerated and all
// manual modifications will be lost. // ************************************************************************ // // PASTLWTR : 1.2 // File generated on 03-4-9 21:09:18 from Type Library described below. // ************************************************************************ //
// Type Lib: E:\Delphi面向對象編程思想\示例程序\封裝\用COM+封裝對象\DemoSvr.tlb (1) // LIBID: {B96FFC20-65BC-11D7-B847-001060806215} // LCID: 0 // Helpfile: // HelpString: DemoSvr Library // DepndLst: // (1) v2.0 stdole, (C:\WINDOWS\SYSTEM\stdole2.tlb) // ************************************************************************ // {$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. {$WARN SYMBOL_PLATFORM OFF} {$WRITEABLECONST ON} {$VARPROPSETTER ON} interface uses Windows, ActiveX, Classes, Graphics, StdVCL, Variants; // *********************************************************************// // GUIDS declared in the TypeLibrary. Following prefixes are used: // Type Libraries : LIBID_xxxx // CoClasses : CLASS_xxxx // DISPInterfaces : DIID_xxxx // Non-DISP interfaces: IID_xxxx // *********************************************************************// const // TypeLibrary Major and minor versions DemoSvrMajorVersion = 1; DemoSvrMinorVersion = 0; LIBID_DemoSvr: TGUID = {B96FFC20-65BC-11D7-B847-001060806215}; IID_IDemoComObj: TGUID = {B96FFC21-65BC-11D7-B847-001060806215}; CLASS_DemoComObj: TGUID = {B96FFC23-65BC-11D7-B847-001060806215}; type // *********************************************************************// // Forward declaration of types defined in TypeLibrary // *********************************************************************// IDemoComObj = interface; // *********************************************************************// // Declaration of CoClasses defined in Type Library // (NOTE: Here we map each CoClass to its Default Interface) // *********************************************************************// DemoComObj = IDemoComObj; // *********************************************************************// // Interface: IDemoComObj // Flags: (256) OleAutomation // GUID: {B96FFC21-65BC-11D7-B847-001060806215} // *********************************************************************// IDemoComObj = interface(IUnknown) [{B96FFC21-65BC-11D7-B847-001060806215}] procedure Drive; stdcall; procedure ride; stdcall; end; // *********************************************************************// // The Class CoDemoComObj provides a Create and CreateRemote method to // create instances of the default interface IDemoComObj exposed by // the CoClass DemoComObj. The functions are intended to be used by // clients wishing to automate the CoClass objects exposed by the // server of this typelibrary. // *********************************************************************// CoDemoComObj = class class function Create: IDemoComObj; class function CreateRemote(const MachineName: string): IDemoComObj; end; implementation uses ComObj; class function CoDemoComObj.Create: IDemoComObj; begin Result := CreateComObject(CLASS_DemoComObj) as IDemoComObj; end; class function CoDemoComObj.CreateRemote(const MachineName: string): IDemoComObj; begin Result := CreateRemoteComObject(MachineName, CLASS_DemoComObj) as IDemoComObj; end; end.

技術分享圖片

class function CoDemoComObj.Create: IDemoComObj;
begin
  Result := CreateComObject(CLASS_DemoComObj) as IDemoComObj;
end;

技術分享圖片

function CreateComObject(const ClassID: TGUID): IUnknown;
begin
  OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
    CLSCTX_LOCAL_SERVER, IUnknown, Result));
end;

技術分享圖片

技術分享圖片

class function CoDemoComObj.CreateRemote(const MachineName: string): IDemoComObj;
begin
  Result := CreateRemoteComObject(MachineName, CLASS_DemoComObj) as IDemoComObj;
end;

技術分享圖片

Delphi 封裝(4)-物理上的封裝-物理封裝和動態鏈接