Chapter 20 - Project ComPlus1 |
Project Structure
| ComPlus1.dpr |
library ComPlus1;
uses
ComServ,
ComPlus1_TLB in 'ComPlus1_TLB.pas',
ComPObject1 in 'ComPObject1.pas' ;
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
begin
end.
| ComPlus1_TLB.pas |
unit ComPlus1_TLB;
interface
uses ActiveX, Classes, Graphics, StdVcl, Variants, Windows;
const
ComPlus1MajorVersion = 1;
ComPlus1MinorVersion = 0;
LIBID_ComPlus1: TGUID = '{AF035833-33FA-47F3-A0DF-769234960CCB}';
IID_IComPlus1Object: TGUID = '{16D85A0C-9B8F-46E6-821F-E72E5A0294BC}';
CLASS_ComPlus1Object: TGUID = '{3E930EF3-CE24-474C-9A33-EF1F02E2930A}';
type
IComPlus1Object = interface;
IComPlus1ObjectDisp = dispinterface;
ComPlus1Object = IComPlus1Object;
IComPlus1Object = interface(IDispatch)
['{16D85A0C-9B8F-46E6-821F-E72E5A0294BC}']
function Get_Value: Integer; safecall;
procedure Set_Value(Value: Integer); safecall;
procedure Increase(Amount: Integer); safecall;
function AsString: WideString; safecall;
property Value: Integer read Get_Value write Set_Value;
end;
IComPlus1ObjectDisp = dispinterface
['{16D85A0C-9B8F-46E6-821F-E72E5A0294BC}']
property Value: Integer dispid 1;
procedure Increase(Amount: Integer); dispid 2;
function AsString: WideString; dispid 3;
end;
CoComPlus1Object = class
class function Create: IComPlus1Object;
class function CreateRemote(const MachineName: string): IComPlus1Object;
end;
implementation
uses ComObj;
class function CoComPlus1Object.Create: IComPlus1Object;
begin
Result := CreateComObject(CLASS_ComPlus1Object) as IComPlus1Object;
end;
class function CoComPlus1Object.CreateRemote(const MachineName: string): IComPlus1Object;
begin
Result := CreateRemoteComObject(MachineName, CLASS_ComPlus1Object) as IComPlus1Object;
end;
end.
| ComPObject1.pas |
unit ComPObject1;
interface
uses
ActiveX, MtsObj, Mtx, ComObj, ComPlus1_TLB, StdVcl;
type
TComPlus1Object = class(TMtsAutoObject, IComPlus1Object)
private
fValue: Integer;
protected
function AsString: WideString; safecall;
function Get_Value: Integer; safecall;
procedure Increase(Amount: Integer); safecall;
procedure Set_Value(Value: Integer); safecall;
end;
implementation
uses ComServ, SysUtils;
function TComPlus1Object.AsString: WideString;
begin
Result := Format ('%n', [fValue*1.0]);
end;
function TComPlus1Object.Get_Value: Integer;
begin
Result := fValue;
end;
procedure TComPlus1Object.Increase(Amount: Integer);
begin
Inc (fValue, Amount);
end;
procedure TComPlus1Object.Set_Value(Value: Integer);
begin
fValue := Value;
end;
initialization
TAutoObjectFactory.Create(ComServer, TComPlus1Object, Class_ComPlus1Object,
ciMultiInstance, tmApartment);
end.
|
|