Marco Cantù 1998, Mastering Delphi 4
Project: FIRSTCOM.DPR
Project Structure
FIRSTCOM.DPR
library FirstCom;
uses
ComServ,
NumIntf in 'NumIntf.pas',
NumServ in 'NumServ.pas',
Firstcom_TLB in 'Firstcom_TLB.pas';
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
{$R *.RES}
begin
end.
NUMINTF.PAS
unit NumIntf;
interface
type
INumber = interface
['{B4131140-7C2F-11D0-98D0-444553540000}']
function GetValue: Integer; stdcall;
procedure SetValue (New: Integer); stdcall;
procedure Increase; stdcall;
end;
implementation
end.
NUMSERV.PAS
unit NumServ;
interface
uses
Windows, ActiveX, ComObj, NumIntf;
type
TNumServer = class(TComObject, IUnknown, INumber)
private
fValue: Integer;
public
function GetValue: Integer; virtual; stdcall;
procedure SetValue (New: Integer); virtual; stdcall;
procedure Increase; virtual; stdcall;
procedure Initialize; override;
destructor Destroy; override;
end;
const
Class_NumServer: TGUID =
'{22053AE1-DD08-11D1-B9F1-004845400FAA}';
implementation
uses ComServ;
{ TNumServer }
destructor TNumServer.Destroy;
begin
inherited;
MessageBox (0, 'Object Destroyed',
'TDLLNumber', mb_OK); // API call
end;
function TNumServer.GetValue: Integer;
begin
Result := fValue;
end;
procedure TNumServer.Increase;
begin
Inc (fValue);
end;
procedure TNumServer.Initialize;
begin
inherited;
fValue := 10;
end;
procedure TNumServer.SetValue(New: Integer);
begin
fValue := New;
end;
initialization
TComObjectFactory.Create(ComServer, TNumServer, Class_NumServer,
'NumServer', 'Num Server (First Com)', ciMultiInstance, tmSingle);
end.
FIRSTCOM_TLB.PAS
Copyright Marco Cantù 1998