Da
DLL und Anwendung im selben Adressraum liegen, sollte das eigentlich gehen:
Delphi-Quellcode:
// Anwendung
type
TcsCallback = procedure(var AsMessage : PChar);
procedure CBApp(const ACallbackProc : TcsCallback); external 'callbackdll.dll';
implementation
{$R *.DFM}
procedure CalledBack(var AsMessage : PChar);
begin
ShowMessage(AsMessage);
AsMessage := AsMessage + ' - ' + DateTimetoStr(now);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CBApp(CalledBack);
end;
Delphi-Quellcode:
// DLL
type
TcsCallBack =
procedure(
var AsMessage : PChar);
procedure CBApp(
const ApCallback : TcsCallback);
var
AsMessage: PChar;
begin
AsMessage := '
TEST';
ApCallback(AsMessage);
//jetzt wird der Wert in der Funktion verändert
ShowMessage(AsMessage);
//kann jetzt <> 'TEST' sein
end;
exports CBApp;