Hallo,
Zitat von
schu-r:
Doch wie könnte ich aus der
DLL ein Event im Hauptprogramm genereieren, der es auffordert ein Objekt zu erzeugen und mir zu geben?
Ist doch ganz einfach. Du übergibst der
DLL die Prozeduradresse und die
DLL ruft dann die Prozedur auf.
Besser wäre es aber, Du erstellst eine Klasse, die alle möglichen Objekte erzeugen kann, und übergibst das als Interface an die
DLL.
z. B. so:
Interface-
Unit (in Hauptprogramm und
DLL verwenden):
Delphi-Quellcode:
type
IVCLFactory = interface(IInterface)
function GetButton: TButton;
function GetLabel: TLabel;
...
end;
Im Hauptprogramm:
Delphi-Quellcode:
type
TVCLFactory = class(TInterfacedObject, IVCLFactory)
function GetButton: TButton;
function GetLabel: TLabel;
...
end;
Beim Laden der
DLL übergibst Du dann einfach das Interface:
Delphi-Quellcode:
var
Factory: IVCLFactory;
begin
Factory := TVCLFactory.Create;
// DLL laden
InitDLL(Factory);
// <- hier eine exportierte Funktion aufrufen, der das Interface übergeben wird
end;
So würde ich das machen. Nicht vergessen, am Schluss in der
DLL das Interface freizugeben (nil zuweisen).
Gruß
xaromz