Blockly review
This commit is contained in:
@@ -9,24 +9,34 @@ type
|
||||
// Callback-Prozedur, die von der DLL aufgerufen wird
|
||||
TLogIntegerCallback = procedure( AValue: Integer ); stdcall;
|
||||
|
||||
// Signatur der exportierten DLL-Funktion
|
||||
TStarteLogikProc = procedure( ALogCallback: TLogIntegerCallback ); stdcall;
|
||||
// NEU: Typ für die Host-Additionsfunktion
|
||||
THostAddIntegersCallback = function( ANum1: Integer; ANum2: Integer ): Integer; stdcall;
|
||||
|
||||
// NEUE, VEREINFACHTE Signatur der exportierten DLL-Funktion
|
||||
// Jetzt nur noch der Log-Callback und der neue Integer-Input-Parameter
|
||||
TStarteLogikProc = procedure(
|
||||
ALogIntProc: TLogIntegerCallback;
|
||||
AHostInputInteger: Integer;
|
||||
AHostAddIntegersProc: THostAddIntegersCallback // <--- Der neue Host-Unterprogramm-Parameter
|
||||
); stdcall;
|
||||
|
||||
type
|
||||
TLLVMRunner = class
|
||||
private
|
||||
FModule: HMODULE;
|
||||
FStarteLogik: TStarteLogikProc;
|
||||
class var
|
||||
FLog: TStrings;
|
||||
class procedure LogInteger( AValue: Integer ); static; stdcall;
|
||||
public
|
||||
constructor Create(const ADLLPath: string);
|
||||
destructor Destroy; override;
|
||||
procedure Execute;
|
||||
class property Log: TStrings read FLog write FLog;
|
||||
end;
|
||||
|
||||
TLLVMRunner = class
|
||||
private
|
||||
FModule: HMODULE;
|
||||
FStarteLogik: TStarteLogikProc;
|
||||
class var
|
||||
FLog: TStrings;
|
||||
class procedure LogInteger( AValue: Integer ); static; stdcall;
|
||||
// NEU: Host-Unterprogramm-Implementierung
|
||||
class function HostAddIntegers( ANum1: Integer; ANum2: Integer ): Integer; static; stdcall;
|
||||
public
|
||||
constructor Create(const ADLLPath: string);
|
||||
destructor Destroy; override;
|
||||
procedure Execute( AInputInteger: Integer );
|
||||
class property Log: TStrings read FLog write FLog;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ TLLVMRunner }
|
||||
@@ -50,19 +60,33 @@ begin
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TLLVMRunner.Execute;
|
||||
begin
|
||||
if Assigned( FStarteLogik ) then
|
||||
// Führe die DLL-Funktion aus und übergebe unsere Callback-Methode
|
||||
FStarteLogik( LogInteger );
|
||||
// NEUE Implementierung der Host-Funktion
|
||||
class function TLLVMRunner.HostAddIntegers( ANum1: Integer; ANum2: Integer ): Integer;
|
||||
begin
|
||||
Result := ANum1 + ANum2; // Die eigentliche Logik
|
||||
if Assigned(FLog) then
|
||||
FLog.Add(Format('DLL hat Host-Addition angefordert: %d + %d = %d', [ANum1, ANum2, Result]));
|
||||
end;
|
||||
|
||||
// Die Execute-Methode muss angepasst werden, um den neuen Funktionszeiger zu übergeben
|
||||
procedure TLLVMRunner.Execute( AInputInteger: Integer );
|
||||
begin
|
||||
if Assigned( FStarteLogik ) then
|
||||
FStarteLogik(
|
||||
LogInteger,
|
||||
AInputInteger,
|
||||
HostAddIntegers // <--- Adresse der Host-Funktion übergeben
|
||||
);
|
||||
end;
|
||||
|
||||
// Dies ist die Methode, die die DLL aufruft.
|
||||
// Sie muss "static" (class procedure) sein, um eine feste Adresse zu haben.
|
||||
// Dies ist die Methode, die die DLL für LogInteger aufruft.
|
||||
class procedure TLLVMRunner.LogInteger( AValue: Integer );
|
||||
begin
|
||||
if Assigned( FLOg ) then
|
||||
if Assigned( FLog ) then
|
||||
FLog.Add( Format( 'DLL logged integer: %d', [AValue] ) );
|
||||
end;
|
||||
|
||||
// Die Implementierungen von GetCurrentDateTimeUTCHost und GetComponentInZoneHost
|
||||
// wurden hier entfernt, da sie nicht mehr benötigt werden.
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user