Nochmal ein Danke an alle die hier bisher geantwortet haben. Allerdings hab ich nun ein Verständnisproblem in Bezug auf Vererbung. Normalerweise würde ich dafür einen neuen Thread eröffnen, aber da die Erklärung des Problems auf der bereits am Anfang gelisteten Erklärung basiert, packe ich das mal hier mit hinzu.
Und zwar existiert ja wie gesagt ein Engine-Objekt und (später) mehrere Manager. Diese sollen von einer Basisklasse abgeleitet werden. Nun ergibt sich grob zusammengefasst folgende Konstruktion.
Delphi-Quellcode:
unit ICE_Interfaces;
interface
const
IID_IICEEngine: TGUID = '
{1E017D9B-7CA7-4D5E-A124-09A11C38956C}';
IID_IICEEngineObject: TGUID = '
{4B79DEA1-B898-4604-8F34-BC7F9D9575CA}';
IID_IICEResourceManager: TGUID = '
{B773EEA0-5055-4519-8D91-BAAD290712BD}';
{ Forward. }
type
IICEEngine =
interface;
IICEEngineObject =
interface;
IICEResourceManager =
interface;
IICEEngine =
interface(IUnknown)
['
{1E017D9B-7CA7-4D5E-A124-09A11C38956C}']
function GetResourceManager: IICEResourceManager;
safecall;
property ResourceManager: IICEResourceManager
read GetResourceManager;
end;
IICEEngineObject =
interface(IUnknown)
['
{4B79DEA1-B898-4604-8F34-BC7F9D9575CA}']
function GetEngine: IICEEngine;
safecall;
property Engine: IICEEngine
read GetEngine;
end;
IICEResourceManager =
interface(IICEEngineObject)
['
{B773EEA0-5055-4519-8D91-BAAD290712BD}']
end;
implementation
end.
Delphi-Quellcode:
unit ICE_BaseClasses;
interface
uses
ICE_Interfaces;
type
TICEEngineObject =
class(TInterfacedObject, IICEEngineObject)
private
FEngine: IICEEngine;
function GetEngine: IICEEngine;
protected
function _GetEngine: IICEEngine;
safecall;
{ IICEEngineObject }
function IICEEngineObject.GetEngine = _GetEngine;
public
constructor Create(e: IICEEngine);
virtual;
property Engine: IICEEngine
read GetEngine;
end;
implementation
{ TICEEngineObject }
constructor TICEEngineObject.Create(e: IICEEngine);
begin
FEngine := e;
end;
function TICEEngineObject.GetEngine: IICEEngine;
begin
Result := FEngine;
end;
function TICEEngineObject._GetEngine: IICEEngine;
begin
Result := Engine;
end;
end.
Delphi-Quellcode:
unit ICE_ResourceManager;
interface
uses
Classes, SysUtils,
ICE_BaseClasses, ICE_Interfaces;
type
TICEResourceManager =
class(TICEEngineObject,IICEResourceManager)
private
protected
public
constructor Create(e: IICEEngine);
override;
end;
implementation
{ TICEResourceManager }
constructor TICEResourceManager.Create(e: IICEEngine);
begin
inherited Create(e);
end;
initialization
finalization
end.
IICEResourceManager erbt von
IICEEngineObject.
Genaue wie
TICEResourceManager von
TICEEngineObject.
Code:
TICEEngineObject -> implementiert -> IICEEngineObject
| |
Ableitung Ableitung
| |
TICEResourceManager -> implementiert -> IICEResourceManager
Nun bekomme ich beim kompilieren folgende Fehlermeldung "
[Pascal Fehler] ICE_ResourceManager.pas(40): E2003 Undefinierter Bezeichner: 'GetEngine'".
Manchmal seh ich glaube ich den Wald vor lauter Bäumen nicht. Ich kann diese Fehlermeldung in diesem Zusammenhang nicht nachvollziehen bzw. sehe keine Begründung dafür.