Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Funktionen mit PascalScript auslagern (https://www.delphipraxis.net/148640-funktionen-mit-pascalscript-auslagern.html)

Codewalker 5. Mär 2010 17:49


Funktionen mit PascalScript auslagern
 
Ich würde gerne einige Funktionen in Skripte auslagern, damit man diese ohne Neukompilierung verändern kann. Die Funktionen haben feste Namen und feste Parameter (Anzahl und Typ). Das ganze würde ich gerne mit PascalScript umsetzen. Hat jemand einen Ansatz oder eine Idee, wie man das realisieren könnte?

Wolfgang Mix 5. Mär 2010 18:04

Re: Funktionen mit PascalScript auslagern
 
Was spricht denn gegen eine unit?

Phoenix 5. Mär 2010 18:09

Re: Funktionen mit PascalScript auslagern
 
Wo hakt es denn?
Weisst Du nicht, wie man eine Methode aus einem Script aufruft?

Hier ist ein kleiner Artikel der die Grundsätze eigentlich ziemlich klar macht.

Daniela.S 5. Mär 2010 18:09

Re: Funktionen mit PascalScript auslagern
 
Ich habe gerade Pascal Script in ein Projekt implementiert. Funktioniert sehr gut, allerdings sieht es mit einer Hilfe bzw. Anleitung recht mager aus. Hier findest du einen Ansatz. Beim Download sind auch einige Beispiele dabei. Da kannst du sicher eines als Basis nehmen.

Kompliziert ist es dann erst geworden als ich eigene Klassen eingebunden habe. Hab's aber nach einer Weile hinbekommen...


liebe Grüße,
Daniela

Phoenix 5. Mär 2010 18:23

Re: Funktionen mit PascalScript auslagern
 
Zitat:

Zitat von Daniela.S
allerdings sieht es mit einer Hilfe bzw. Anleitung recht mager aus.

Dem ist leider tatsächlich so :oops:.
Allerdings gibt es auch in den Diskussionsgruppen (news.remobjects.com) recht guten Support.

Wolfgang Mix 5. Mär 2010 19:07

Re: Funktionen mit PascalScript auslagern
 
Zitat:

Zitat von Daniela.S
Kompliziert ist es dann erst geworden als ich eigene Klassen eingebunden habe. Hab's aber nach einer Weile hinbekommen...

Es wäre nett, wenn du der Gemeinde dazu ein Beispiel zeigen könntest.

Gruss aus dem kalten Norden

Wolfgang

Codewalker 5. Mär 2010 19:12

Re: Funktionen mit PascalScript auslagern
 
Zitat:

Zitat von Phoenix
Wo hakt es denn?
Weisst Du nicht, wie man eine Methode aus einem Script aufruft?

Hier ist ein kleiner Artikel der die Grundsätze eigentlich ziemlich klar macht.

Wie ich eine Methode/Funktion aufrufe ist mir prinzipiell klar, aber das Skript muss ja dafür "laufen". Bisher rufe ich Compile, dann Execute auf und wollte dann mit ExecuteFunction eine Funktion ausführen. Problem ist, dass das Skript dann schon zu Ende gelaufen ist. BeispielSkript:
Delphi-Quellcode:
function SagWas: String;
begin
 Result := 'Test';
end;

DeddyH 5. Mär 2010 19:13

Re: Funktionen mit PascalScript auslagern
 
Was soll denn da passieren?

Wolfgang Mix 5. Mär 2010 19:20

Re: Funktionen mit PascalScript auslagern
 
Das ist doch kein Script, das ist eine simpelste Funktion!

Daniela.S 5. Mär 2010 19:25

Re: Funktionen mit PascalScript auslagern
 
@Wolfgang
Mach ich gerne, kann's aber erst am Montag, wenn ich wieder in der Arbeit bin, posten. Hab mir die Arbeit dieses Wochenende mal nicht mit nach Hause genommen :P

Codewalker 5. Mär 2010 19:48

Re: Funktionen mit PascalScript auslagern
 
Zitat:

Zitat von Wolfgang Mix
Das ist doch kein Script, das ist eine simpelste Funktion!

Ist ja nur ein Beispiel. Das soll quasi im Skript stehen und ich will aus meinem Programm diese Funktion aufrufen können und das Ergebnis erhalten. Das muss doch gehen...

Daniela.S 5. Mär 2010 19:59

Re: Funktionen mit PascalScript auslagern
 
Steht auf der Seite, die wir vorhin verlinkt haben, gaaanz unten.


The component version of Pascal Script also supports execution of scripted functions. This works by using the ExecuteFunction method.
Delphi-Quellcode:
ShowMessage(CompExec.ExecuteFunction([1234.5678, 4321,
                                      'test'],
                                     'TestFunction'));
This will execute the function called 'TestFunction' with 3 parameters, a float, an integer and a string. The result will be passed back to ShowMessage.


In deinem Fall vielleicht so...
Delphi-Quellcode:
Ergebnis := CompExec.ExecuteFunction([],'SagWas'));

Wolfgang Mix 5. Mär 2010 20:26

Re: Funktionen mit PascalScript auslagern
 
Zitat:

Zitat von Daniela.S
@Wolfgang
Mach ich gerne, kann's aber erst am Montag, wenn ich wieder in der Arbeit bin, posten. Hab mir die Arbeit dieses Wochenende mal nicht mit nach Hause genommen :P

Das wäre lieb von Dir

Schönes Wochenende


Wolfgang

Codewalker 6. Mär 2010 13:00

Re: Funktionen mit PascalScript auslagern
 
Das ganze mit ExecuteFunction funktioniert. Das Problem lag woanders: Da in meiner Unit kein begin...end. - Block war, konnte er die Funktion nicht aufrufen. In den Compiler-Optionen muss icAllowNoBegin und icAllowNoEnd gesetzt sein oder der Block eingefügt werden, so dass das Skript dann so aussieht:
Delphi-Quellcode:
function TuWas(): String;
begin
 Result := 'Was';
end;

// Und jetzt der leere Block
begin

end.

Daniela.S 8. Mär 2010 08:29

Re: Funktionen mit PascalScript auslagern
 
Hallo,

wie versprochen hier noch ein Beispiel wie ich eigene Objekte, die auf keine Vorgängerklasse basieren, importiert habe.

Delphi-Quellcode:
procedure TmyObjectValue_Read(Self: TmyObject; var value: string);
begin
  value := Self.MyValue;
end;

procedure TmyObjectValue_Write(Self: TmyObject; const value: string);
begin
  Self.MyValue := value;
end;

procedure RIRegisterMyObjects(Cl: TPSRuntimeClassImporter);
begin
  with Cl.Add( TmyObject ) do begin
    RegisterPropertyHelper( @TmyObjectValue_Read, @TmyObjectValue_Write, 'MyValue' );
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz