Hallo, ich versuche gerade auf methoden in dynamisch geladenen packages zuzugreifen.
Zur Vereinheitlichung der enthaltenen Klassen wird hierzu ein basis interface angegeben (gemeinsames, statisch gelinktes
package, welches dann die anderen nachlädt).
Da die ladende EXE also den content der dynamisch geladenen packages nicht kennt, werden die objecte nach einsatz von "getclass" erst als tinterfacedpersistent gecastet und dann auf den interface support getestet.
Falls der test positiv, dann sollten die im interface delarierten methoden aufgerufen werden.
Nun also zum Problem:
Delphi-Quellcode:
Function Tplgloader.Getinterfacedclass(Classname:
String; Intf: Tguid)
: Tpersistentclass;
Begin
Result := Getclass(Classname);
Assert(Assigned(Result), '
Class <' + Classname + '
> not found.');
Assert(Supports(Result, Intf), '
Class <' + Classname +
'
> does not support provided interface.')
End;
//hauptanwendung
begin
With Loader
Do // Globaler loader ist vom typ Tplgloader, lädt,entlädt und verwaltet packages
Try
Begin
//guid of interface iexample
Guid := Tguid.Create('
{EB84A8B3-0A16-4746-9034-47E81990F6D9}');
//wurde dem interface "iexample" im package zugeordnet
I := Getinterfacedclass('
texampleclass',
Guid).Create
As Tinterfacedpersistent;
If Supports(I,
Guid)
//ok
Then
//>> Problemstelle: typecast und methodenaufruf
With I
As iexample
Do //wie kann man zum aufruf auf das interface typecasten, "iExample" kennt die hauptanwendung ja nicht, da erst im package deklariert?
Begin
//und somit die methoden des interfaces aufrufen??
Init('
aaa', True);
// zur Zeit nicht möglich
End;
I.Free;
End;
Finally
End;
End;