AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit importierter Funktion aus PascalScript
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit importierter Funktion aus PascalScript

Ein Thema von JamesTKirk · begonnen am 3. Feb 2006 · letzter Beitrag vom 6. Feb 2006
 
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#1

Problem mit importierter Funktion aus PascalScript

  Alt 3. Feb 2006, 14:07
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...

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

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 = 'Fthen 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 = 'Fthen 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...

PS: Es geht um den Nullstellensatz bezüglich globalen Aussagen bei Funktionen (Infinitesimalrechnung, 11. Klasse)
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz