Hallo zusammen,
Ich habe ein kleines bis mittelgroßes Problem mit Interfaces.
Es handelt sich um diverse Klassen zur Ansteuerung diverser OnlineTerminals. Da jedes OnlineTerminal bestimmte Administrations Funktionen benötigt, welche sich i.d.R. stark unterscheiden habe Ich jeder Klasse ein Administrations Object spendiert.
Basis für Administrations Objecte
[delphi]
TTiOnlineTerminalAdmin = class (TInterfacedObject)
protected
FIFTerminal : TTiOnlineTerminalIF;
public
constructor create ( aTerminal : TTiOnlineTerminalIF );
destructor destroy; override;
end;
[/delphi]
Deklaration einer Adminstrations-Objekt Klasse
[delphi]
TTiOTHFT201Admin = class(TTiOnlineTerminalAdmin, ITiIFLogin, ITiIFInteractiveAdministration)
public
function Login : Boolean; stdcall;
function Logout : Boolean; stdcall;
function ExecuteCmd ( aCmd : String ) : Boolean; stdcall;
function UpdateTerminalParams : Boolean; stdcall;
constructor create (aTerminal: TTiOnlineTerminalIF);
destructor destroy; override;
end;
[/delphi]
Die Adminstrations Objekte werden im Create der eigentlich OnlineTerminal Klasse kreiert,
und beim Destroy der selbigen wieder weggeschmissen.
Das eigentliche Problem besteht jetzt darin, das wenn Ich die TerminalKlasse (bzw. das Administrations Object, der selbigen) aus meiner Anwendung per
[delphi]
with fDlgHWSettings do begin
if Supports( HWCom.Terminal.Administration , IID_ITiIFInteractiveAdministration ) then
cxOTIFInteractiveAdministration.Enabled := True;
if Supports( HWCom.Terminal.Administration , IID_ITiIFLogin ) then
cxOTIFLogin.Enabled := True;
end;
[/delphi]
abfrage dann knallt (Zugriffsverletzung bei Adresse BlaBla) es immer, wenn ich zum 2ten mal Supports aufrufe. Die Objekte werden in der Zwischenzeit
nicht weggeworfen und sind auch noch Assigned.
Hat irgendjemand ne Idee, woran das liegen könnte??
Viele Grüße,
Christian
Ich habe ein kleines bis mittelgroßes Problem mit Interfaces.
Es handelt sich um diverse Klassen zur Ansteuerung diverser OnlineTerminals. Da jedes OnlineTerminal bestimmte Administrations Funktionen benötigt, welche sich i.d.R. stark unterscheiden habe Ich jeder Klasse ein Administrations Object spendiert.
Basis für Administrations Objecte
[delphi]
TTiOnlineTerminalAdmin = class (TInterfacedObject)
protected
FIFTerminal : TTiOnlineTerminalIF;
public
constructor create ( aTerminal : TTiOnlineTerminalIF );
destructor destroy; override;
end;
[/delphi]
Deklaration einer Adminstrations-Objekt Klasse
[delphi]
TTiOTHFT201Admin = class(TTiOnlineTerminalAdmin, ITiIFLogin, ITiIFInteractiveAdministration)
public
function Login : Boolean; stdcall;
function Logout : Boolean; stdcall;
function ExecuteCmd ( aCmd : String ) : Boolean; stdcall;
function UpdateTerminalParams : Boolean; stdcall;
constructor create (aTerminal: TTiOnlineTerminalIF);
destructor destroy; override;
end;
[/delphi]
Die Adminstrations Objekte werden im Create der eigentlich OnlineTerminal Klasse kreiert,
und beim Destroy der selbigen wieder weggeschmissen.
Das eigentliche Problem besteht jetzt darin, das wenn Ich die TerminalKlasse (bzw. das Administrations Object, der selbigen) aus meiner Anwendung per
[delphi]
with fDlgHWSettings do begin
if Supports( HWCom.Terminal.Administration , IID_ITiIFInteractiveAdministration ) then
cxOTIFInteractiveAdministration.Enabled := True;
if Supports( HWCom.Terminal.Administration , IID_ITiIFLogin ) then
cxOTIFLogin.Enabled := True;
end;
[/delphi]
abfrage dann knallt (Zugriffsverletzung bei Adresse BlaBla) es immer, wenn ich zum 2ten mal Supports aufrufe. Die Objekte werden in der Zwischenzeit
nicht weggeworfen und sind auch noch Assigned.
Hat irgendjemand ne Idee, woran das liegen könnte??
Viele Grüße,
Christian
Comment