Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit importierter Funktion aus PascalScript (https://www.delphipraxis.net/62365-problem-mit-importierter-funktion-aus-pascalscript.html)

JamesTKirk 3. Feb 2006 14:07


Problem mit importierter Funktion aus PascalScript
 
Hi zusammen!

Ich versuche derzeit mit PascalScript ein Pascalprogramm aus unserem Mathebuch ein wenig flexibler zu gestalten und habe deswegen zwei wichtige Funktionen in eine ScriptDatei ausgelagert:

Delphi-Quellcode:
function F(x:Single):Single;
begin
  Result:=x*(x*x-4)+1;
end;

function GetDescription:String;
begin
  Result:='f:x->x^3-4*x+1';
end;
Erstere Funktion liefert für x den passenden Funktionswert und die zweite liefert einfach einen Beschreibungsstring der Funktion.

Jetzt hab ich die Funktionen mit TPSScript.OnVerifyProc importiert und feststellen müssen, dass es im "Tutorial" auf der RemObjects Homepage eine Eigenschaft bei TPSInternalProcedure gibt, die bei mir nicht existiert; nämlich TPSInternalProcedure.aExport und das dazugehörige etExportDecl.

Die zweite Funktion läuft ohne Probleme, doch bei der ersten bekomm ich eine 'Invalid floating point operation', sobald ich sie aufrufe... Meine Vermutung ist jetzt, dass es an dem fehlenden aExport liegt... :gruebel:

Hier noch der wichtigste Code, falls es doch an mir scheitert :mrgreen: :

Delphi-Quellcode:
type
  TF=function(x:Single):Single of object;
  TGetDescription=function:String of object;

procedure TMainForm.ScriptVerifyProc(Sender: TPSScript;
  Proc: TPSInternalProcedure; const Decl: string; var Error: Boolean);
begin
  if Proc.Name = 'F' then begin
    if not ExportCheck(Sender.Comp, Proc,
               [btSingle, btSingle], [pmIn]) then begin
      Sender.Comp.MakeError('', ecCustomError, 'Funktionskopf von F stimmt nicht mit F(x:Single):Single überein.');
      Error := True;
    end
    else begin
//      Proc.aExport := etExportDecl;
      Error := False;
    end;
  end else
  if Proc.Name = 'F' then begin
    if not ExportCheck(Sender.Comp, Proc,
               [btString], []) then begin
      Sender.Comp.MakeError('', ecCustomError, 'Funktionskopf von GetDescription stimmt nicht mit GetDescription:String überein.');
      Error := True;
    end
    else begin
      Error:=FALSE;
    end;
  end
  else
    Error := False;
end;

//Hier noch das wichtigste des OnClick-Events vom StartButton
procedure TMainForm.ComputeClick(Sender:TObject);
var
  F:TF;
  GetDescription:TGetDescription;
  a,b,m,e:Single;
begin
  //Script ist die TPSScript Komponente
  if Script.Compile then begin  
   F:=TF(Script.GetProcMethod('F'));
   if @F=NIL then begin
    ShowMessage('Funktion F(x:Single):Single konnte nicht importiert werden');
    Exit;
   end;
   GetDescription:=TGetDescription(Script.GetProcMethod('GetDescription'));
   if @GetDescription=NIL then begin
    ShowMessage('Funktion GetDescription:String konnte nicht importiert werden');
    Exit;
   end;
   //Hier hab ich ein paar Typkonvertierungen mal weggelassen ;)
   repeat
    if F(a)*F(m)<=0 then //<--- Hier die Exception
     b:=m
    else
     a:=m;
    Application.ProcessMessages;
   until Abs(F(m))<e;
   //auch die Ausgabe der Werte hab ich mir jetzt mal gespart :D
  end;
end;
Ich hoff mal, ihr wisst ne Lösung... :gruebel:

PS: Es geht um den Nullstellensatz bezüglich globalen Aussagen bei Funktionen (Infinitesimalrechnung, 11. Klasse) :zwinker:

JamesTKirk 4. Feb 2006 14:54

Re: Problem mit importierter Funktion aus PascalScript
 
24h sind um... d.h. *PUSH*

Ich hab auch mal in der Newsgroup von RemObjects nachgeschaut... entweder es steht tatsächlich nichts drin, oder ich bin zu dumm zum Lesen :mrgreen:

kalmi01 4. Feb 2006 15:55

Re: Problem mit importierter Funktion aus PascalScript
 
Hi "Weltraumreisender",

probiers doch mal mit DelphiWebScript

Zu PascalScript kann ich Dir nicht helfen, aber mit DWS bin ich sehr zufrieden.

JamesTKirk 4. Feb 2006 22:39

Re: Problem mit importierter Funktion aus PascalScript
 
Danke für den Tipp... das hat das Problem 1a gelöst und der Code ist um einige Zeilen leichter geworden :mrgreen:

(Und die Dokumentation ist auch besser :zwinker: )

Edit: Musste nur während der Packageinstallation ein bissl was auskommentieren...

kalmi01 5. Feb 2006 17:02

Re: Problem mit importierter Funktion aus PascalScript
 
Und ?
wie ist das Laufzeitverhalten ?
respektive die Geschwindigkeit ?

JamesTKirk 6. Feb 2006 18:41

Re: Problem mit importierter Funktion aus PascalScript
 
Man kann sich eigentlich nicht beschweren... seinen Zweck erfüllt's... die aufwendigeren Sachen wie Graph zeichnen (sollte ich überhaupt etwas in der Richtung einbauen... :zwinker: ) würde ich eh Hardcoden... Aber auf jeden Fall noch mal Danke für den Hinweis :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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