Chapter 22 - Project AspTest |
Project Structure
| AspTest.dpr |
library AspTest;
uses
ComServ,
AspObj1 in 'AspObj1.pas',
TestDm in 'TestDm.pas' ;
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
begin
end.
| AspTest_TLB.pas |
unit AspTest_TLB;
interface
uses Windows, ActiveX, Classes, Graphics, OleServer, OleCtrls, StdVCL;
const
AspTestMajorVersion = 1;
AspTestMinorVersion = 0;
LIBID_AspTest: TGUID = '{1F70FA60-499C-11D3-B9F1-00000100A27B}';
IID_IAspTest1: TGUID = '{1F70FA61-499C-11D3-B9F1-00000100A27B}';
CLASS_AspTest1_: TGUID = '{1F70FA63-499C-11D3-B9F1-00000100A27B}';
type
IAspTest1 = interface;
IAspTest1Disp = dispinterface;
AspTest1_ = IAspTest1;
IAspTest1 = interface(IDispatch)
['{1F70FA61-499C-11D3-B9F1-00000100A27B}']
procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
procedure OnEndPage; safecall;
procedure ShowData; safecall;
procedure ShowTable; safecall;
procedure Hello; safecall;
end;
IAspTest1Disp = dispinterface
['{1F70FA61-499C-11D3-B9F1-00000100A27B}']
procedure OnStartPage(const AScriptingContext: IUnknown); dispid 1;
procedure OnEndPage; dispid 2;
procedure ShowData; dispid 3;
procedure ShowTable; dispid 4;
procedure Hello; dispid 5;
end;
CoAspTest1_ = class
class function Create: IAspTest1;
class function CreateRemote(const MachineName: string): IAspTest1;
end;
TAspTest1_Properties= class;
TAspTest1_ = class(TOleServer)
private
FIntf: IAspTest1;
FProps: TAspTest1_Properties;
function GetServerProperties: TAspTest1_Properties;
function GetDefaultInterface: IAspTest1;
protected
procedure InitServerData; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Connect; override;
procedure ConnectTo(svrIntf: IAspTest1);
procedure Disconnect; override;
procedure OnStartPage(const AScriptingContext: IUnknown);
procedure OnEndPage;
procedure ShowData;
procedure ShowTable;
procedure Hello;
property DefaultInterface: IAspTest1 read GetDefaultInterface;
published
property Server: TAspTest1_Properties read GetServerProperties;
end;
TAspTest1_Properties = class(TPersistent)
private
FServer: TAspTest1_;
function GetDefaultInterface: IAspTest1;
constructor Create(AServer: TAspTest1_);
protected
public
property DefaultInterface: IAspTest1 read GetDefaultInterface;
published
end;
procedure Register;
implementation
uses ComObj;
class function CoAspTest1_.Create: IAspTest1;
begin
Result := CreateComObject(CLASS_AspTest1_) as IAspTest1;
end;
class function CoAspTest1_.CreateRemote(const MachineName: string): IAspTest1;
begin
Result := CreateRemoteComObject(MachineName, CLASS_AspTest1_) as IAspTest1;
end;
procedure TAspTest1_.InitServerData;
const
CServerData: TServerData = (
ClassID: '{1F70FA63-499C-11D3-B9F1-00000100A27B}';
IntfIID: '{1F70FA61-499C-11D3-B9F1-00000100A27B}';
EventIID: '';
LicenseKey: nil;
Version: 500);
begin
ServerData := @CServerData;
end;
procedure TAspTest1_.Connect;
var
punk: IUnknown;
begin
if FIntf = nil then
begin
punk := GetServer;
Fintf:= punk as IAspTest1;
end;
end;
procedure TAspTest1_.ConnectTo(svrIntf: IAspTest1);
begin
Disconnect;
FIntf := svrIntf;
end;
procedure TAspTest1_.DisConnect;
begin
if Fintf <> nil then
begin
FIntf := nil;
end;
end;
function TAspTest1_.GetDefaultInterface: IAspTest1;
begin
if FIntf = nil then
Connect;
Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation');
Result := FIntf;
end;
constructor TAspTest1_.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FProps := TAspTest1_Properties.Create(Self);
end;
destructor TAspTest1_.Destroy;
begin
FProps.Free;
inherited Destroy;
end;
function TAspTest1_.GetServerProperties: TAspTest1_Properties;
begin
Result := FProps;
end;
procedure TAspTest1_.OnStartPage(const AScriptingContext: IUnknown);
begin
DefaultInterface.OnStartPage(AScriptingContext);
end;
procedure TAspTest1_.OnEndPage;
begin
DefaultInterface.OnEndPage;
end;
procedure TAspTest1_.ShowData;
begin
DefaultInterface.ShowData;
end;
procedure TAspTest1_.ShowTable;
begin
DefaultInterface.ShowTable;
end;
procedure TAspTest1_.Hello;
begin
DefaultInterface.Hello;
end;
constructor TAspTest1_Properties.Create(AServer: TAspTest1_);
begin
inherited Create;
FServer := AServer;
end;
function TAspTest1_Properties.GetDefaultInterface: IAspTest1;
begin
Result := FServer.DefaultInterface;
end;
procedure Register;
begin
RegisterComponents('Servers',[TAspTest1_]);
end;
end.
| AspObj1.pas |
unit AspObj1;
interface
uses
ComObj, ActiveX, AspTlb, StdVcl, AspTest_TLB;
type
Tasptest = class(TASPObject, IAspTest1)
protected
procedure OnEndPage; safecall;
procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
procedure ShowData; safecall;
procedure ShowTable; safecall;
procedure Hello; safecall;
private
StartTime: TDateTime;
end;
implementation
uses ComServ, testdm, SysUtils;
procedure Tasptest.Hello;
var
strName: string;
begin
strName := Session ['UserName'];
Response.Write ('<h3>Hello, ' + strName + '</h3>');
Response.Write ('<p>Page started at ' + TimeToStr (StartTime) + '</p>');
end;
procedure Tasptest.OnEndPage;
begin
inherited OnEndPage;
end;
procedure Tasptest.OnStartPage(const AScriptingContext: IUnknown);
begin
inherited OnStartPage(AScriptingContext);
StartTime := Now;
end;
procedure Tasptest.ShowData;
begin
Response.Write ('<h3>Delphi wrote this text</h3>');
end;
procedure Tasptest.ShowTable;
begin
DataModule1 := TDataModule1.Create (nil);
try
Response.Write (DataModule1.DataSetTableProducer1.Content)
finally
DataModule1.Free;
end;
end;
initialization
TAutoObjectFactory.Create(ComServer, Tasptest, CLASS_AspTest1_,
ciMultiInstance, tmApartment);
end.
| TestDm.pas |
unit TestDm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
HTTPApp, DBWeb, Db, ADODB, DBTables;
type
TDataModule1 = class(TDataModule)
Table1: TTable;
DataSetTableProducer1: TDataSetTableProducer;
private
public
end;
var
DataModule1: TDataModule1;
implementation
end.
| TestDm.dfm |
object DataModule1: TDataModule1
OldCreateOrder = False
Left = 240
Top = 215
Height = 480
Width = 696
object Table1: TTable
Active = True
DatabaseName = 'DBDEMOS'
TableName = 'employee.db'
Left = 56
Top = 32
end
object DataSetTableProducer1: TDataSetTableProducer
MaxRows = -1
DataSet = Table1
Left = 56
Top = 80
end
end
|
|