Ich glaube aber nicht das dynamische
GUID hier überhaupt nötig sind.
Eine Ableitung von TInterfacedObject sollte für die Basisklasse genügen.
Für die Kompatibilität zu
COM-Objekten sollte IUnknown unterstütz, bzw. die anderen Interfaces sollten davon abgeleitet werden.
Das ist auch der Ansatz, den ich bisher verfolgte.
Delphi-Quellcode:
type
TIAVInterface =
class(TInterfacedObject)
function QueryInterface(
const IID: TGUID;
out Obj): HResult;
stdcall;
function _AddRef: Integer;
stdcall;
function _Release: Integer;
stdcall;
private
FGUID: TGUID;
public
constructor create(
GUID: TGUID);
end;
type
ICientContextHolder =
interface(IInterface)
['
{00000000-0000-0000-0000-000000001112}']
end;
PClientContextHolder = ^TClientContextHolder;
TClientContextHolder =
class(TInterfacedObject, ICientContextHolder)
private
FVin: LPWSTR;
FVinKnown: BOOL;
public
constructor Create();
function GetSerialNumber(AInstance: PClientContextHolder): LPWSTR;
virtual;
stdcall;
function GetLicencePlate(AInstance: PClientContextHolder): LPWSTR;
virtual;
stdcall;
[..]
end;
Ist euch zufällig die externe
Exception E0434F4D bekannt? Das ist nämlich die Reaktion der
DLL auf meine Klasse. Die Ergebnisse bei google sind leider recht vielfältig.
Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?