Delphi-PRAXiS
Seite 3 von 12     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   ScriptEngine II (v. 0.6.1) (https://www.delphipraxis.net/140590-scriptengine-ii-v-0-6-1-a.html)

littleDave 27. Sep 2009 20:02

Re: ScriptEngine II (v. 0.3.2.4)
 
Ich habe gerade ein Problem gefunden, bei dem auch der Cache-Manager betroffen ist - vielleicht liegt es daran:

In der Datei "uSE2Consts.pas" findet man folgende Zeile:
Delphi-Quellcode:
class procedure TSE2StreamHelper.WriteString(Stream: TStream;
  const s: string);
var len: cardinal;
begin
  len := length(s);
  Stream.Write(len, SizeOf(len) * SizeOf(char)); // <-- hier ist ein fehler
  Stream.Write(s[1], len);
end;
Diese muss man durch folgende Zeilen ersetzen
Delphi-Quellcode:
class procedure TSE2StreamHelper.WriteString(Stream: TStream;
  const s: string);
var len: cardinal;
begin
  len := length(s);
  Stream.Write(len, SizeOf(len));
  Stream.Write(s[1], len * SizeOf(char)); // <-- muss nur eine Zeile weiter drunter
end;

littleDave 27. Sep 2009 21:26

Re: ScriptEngine II (v. 0.3.3.0)
 
Ich hab gerade eine neue Version hochgeladen :arrow: Version 0.3.3.0

Zum einen hab ich den Bug, den ich gerade beschrieben habe beseitigt. Zudem hab ich noch ein Problem behoben, der mit aktivierten Range-Check aufgetreten ist (Danke an _X_ für den Hinweis).

Es gibt auch eine neue Unit: "uSE2IncHelpers.pas". Bindet man diese Unit ein, sind ein paar Helper-Klassen für die Typen TDateTime, String, Pointer, Single, Double und TColor eingebaut. Die Helper-Funktionen sind auch in der eingebauten IntelliSense-Funktion verfügbar.

Hier mal zwei, drei Beispiele, die mit den Helper-Klassen möglich sind:
Delphi-Quellcode:
var time: TDateTime;
    str : string;
    ptr : pointer;
    dbl : double;
    res : boolean;
begin          
  res := dbl.IsNan;
  res := ptr.Assigned;
  res := (str.IndexOf('h') > 10) and (str.EndsWith('hey'));
  res := (time.Month > 2) and (time.DayOfYear > 128);
end.
Um die Helper-Klassen zu benutzen muss man nur die Unit "uSE2IncHelpers" in die Uses-Liste der Anwendung aufnehmen.

Leider hab ich es noch nicht geschafft, die Helper-Klassen sowie die partiellen Klassen in das PDF mit aufzunehmen - ich werd es aber noch nachholen.

Grüße

toms 28. Sep 2009 06:52

Re: ScriptEngine II (v. 0.3.2.4)
 
Zitat:

Zitat von littleDave
Zitat:

Zitat von toms
Unter Delphi 6 lässt es sich nicht kompilieren. Einige Funktionen sind in der SysUtils.pas noch nicht vorhanden.

Wenn das nicht zu viele seien sollten, wäre es super, wenn du mir eben ne Liste schreiben würdest - dann schmeiß ich diese per Compiler-Switch heraus.


Zitat:

[Error] uSE2IncStrings.pas(306): Undeclared identifier: 'LeftBStr'
[Error] uSE2IncStrings.pas(328): Undeclared identifier: 'MidBStr'
[Error] uSE2IncStrings.pas(345): Undeclared identifier: 'PosEx'
[Error] uSE2IncStrings.pas(350): Undeclared identifier: 'PosEx'
[Error] uSE2IncStrings.pas(366): Undeclared identifier: 'RightBStr'
Diese Funktionen lassen sich leicht nachbauen (anstatt diese per Compiler-Switch herauszuschmeißen)

_x_ 28. Sep 2009 16:46

Re: ScriptEngine II (v. 0.3.3.0)
 
Unter Linux bekommt man in der Unit uSE2PerfMonitor kleine Probs mit Uses Windows; Bitte ein {$IFNDEF FPC} reinmachen.

mfg _X_

EugenB 28. Sep 2009 17:52

Re: ScriptEngine II (v. 0.3.3.0)
 
Ich freu mich das es endlich das die Version der ScriptEngine gibt :stupid:

Aber leider schade das man keine Antwort per PN bekommt :(

Anyway, weiter so , endlich mal ne OOP Scriptsprache =)

littleDave 28. Sep 2009 20:21

Re: ScriptEngine II (v. 0.3.2.4)
 
Zitat:

Zitat von toms
Zitat:

Zitat von littleDave
Zitat:

Zitat von toms
Unter Delphi 6 lässt es sich nicht kompilieren. Einige Funktionen sind in der SysUtils.pas noch nicht vorhanden.

Wenn das nicht zu viele seien sollten, wäre es super, wenn du mir eben ne Liste schreiben würdest - dann schmeiß ich diese per Compiler-Switch heraus.

Zitat:

[Error] uSE2IncStrings.pas(306): Undeclared identifier: 'LeftBStr'
[Error] uSE2IncStrings.pas(328): Undeclared identifier: 'MidBStr'
[Error] uSE2IncStrings.pas(345): Undeclared identifier: 'PosEx'
[Error] uSE2IncStrings.pas(350): Undeclared identifier: 'PosEx'
[Error] uSE2IncStrings.pas(366): Undeclared identifier: 'RightBStr'
Diese Funktionen lassen sich leicht nachbauen (anstatt diese per Compiler-Switch herauszuschmeißen)

Vielen Dank für die Liste - die nächste Version wird die Funktionen nachgebaut drinnen haben. Danke für die Mühe

Zitat:

Zitat von _x_
Unter Linux bekommt man in der Unit uSE2PerfMonitor kleine Probs mit Uses Windows; Bitte ein {$IFNDEF FPC} reinmachen.

mfg _X_

Ist in der aktuellen Version bereits so eingebaut - es wird auch ein Konfigurations-File geben mit dem man das Kompilieren der Script-Engine einstellen kann.

Zitat:

Zitat von EugenB
Ich freu mich das es endlich das die Version der ScriptEngine gibt :stupid:
[...]
Anyway, weiter so , endlich mal ne OOP Scriptsprache =)

Danke für das Lob :-) Freut mich, dass sie ankommt.

Zitat:

Zitat von EugenB
Aber leider schade das man keine Antwort per PN bekommt :(

Oh, ist meine Nachricht nicht gesendet worden :gruebel:? Komisch ... hol ich aber gleich nach.

himitsu 28. Sep 2009 21:14

Re: ScriptEngine II (v. 0.3.2.4)
 
Zitat:

Zitat von littleDave
Vielen Dank für die Liste - die nächste Version wird die Funktionen nachgebaut drinnen haben.

mach die einfach ein nur dann rein, wenn auch nötig ... es muß in aktuellen Versionen ja nicht unbedingt doppelter Ersatz-Code vorhanden sein :angel:

Delphi-Quellcode:
{$IF not Declared(PosEx)}
  function PosEx(...): string;
  begin
    ...
  end;
{$IFEND}
bzw.
Delphi-Quellcode:
interface
  {$IF not Declared(PosEx)}
    function PosEx(...): string;
    {$DEFINE INCLUDE_POSEX}
  {$IFEND}

implementation
  {$IFDEF INCLUDE_POSEX}
    function PosEx(...): string;
    begin
      ...
    end;
  {$ENDIF}
[add]
OK, man könnte es auch von der Delphi-Verion abhängig machen, aber so ist es wohl einfacher ... also wenn man nicht ständig gucken muß, wann was eingeführt wurde usw.

littleDave 28. Sep 2009 21:40

Re: ScriptEngine II (v. 0.3.2.4)
 
Zitat:

Zitat von himitsu
mach die einfach ein nur dann rein, wenn auch nötig ... es muß in aktuellen Versionen ja nicht unbedingt doppelter Ersatz-Code vorhanden sein :angel:

Ich habs so gelöst:

Delphi-Quellcode:
{$IFNDEF DELPHI7UP}
function PosEx(....)
begin
  (...)
end;
{$ENDIF}

// Aufruf:
{$IFDEF DELPHI7UP}
  result := StrUtils.PosEx(....);
{$ELSE}
  result := PosEx(...);
{$ENDIF}
Das Define "DELPHI7UP" wird per Include-File gesetzt, dass in jede Unit der Script-Engine eingebunden wird.

Zitat:

Zitat von himitsu
Delphi-Quellcode:
{$IF not Declared(PosEx)}
  function PosEx(...): string;
  begin
    ...
  end;
{$IFEND}

:shock: geht das wirklich - also das "IF not Declared(PosEx)"? Ich dachte, per Compiler-Switch kann man generell nicht auf Delphi-Elemente zugreifen bzw. überprüfen, ob etwas bereits vorhanden ist :gruebel:

Zitat:

Zitat von himitsu
OK, man könnte es auch von der Delphi-Verion abhängig machen, aber so ist es wohl einfacher ... also wenn man nicht ständig gucken muß, wann was eingeführt wurde usw.

Ich habs jetzt so gelöst, da ich das "declared" nicht kannte.

toms 28. Sep 2009 22:00

Re: ScriptEngine II (v. 0.3.3.0)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es läuft soweit unter Delphi 2010, es gibt jedoch einige Warnungen.

himitsu 28. Sep 2009 22:03

Re: ScriptEngine II (v. 0.3.3.0)
 
Zitat:

Zitat von littleDave
:shock: geht das wirklich - also das "IF not Declared(PosEx)"? Ich dachte, per Compiler-Switch kann man generell nicht auf Delphi-Elemente zugreifen bzw. überprüfen, ob etwas bereits vorhanden ist :gruebel:

Also Funktionen aufrufen oder auf Variableninhalte zugreifen geht natürlich nicht,
aber die "Funktionen" Declared (für Funktionen, Klassen, Konstanten und Variablen) und Defined für Compilerschalter geht.

Ich weiß jetzt nur nicht in welcher Delphiversion das {$IF ...} eingeführt wurde.

Delphi-Quellcode:
{$DEFINE Schalter1}

// dieses
{$IFDEF Schalter1}
  {$IFDEF Schalter2}
    ...
  {$ENDIF}
{$ENDIF}

// ist das Gleiche wie das
{$IF Defined(Schalter1) and Defined(Schalter2)}
  ...
{$IFEND}

// und dann gibt es noch sowas

{$IF not Declared(xyz)} {$MESSAGE Hint 'xyz gibt es nicht'} {$IFEND}

const xyz = 5;

{$IF Declared(xyz)} {$MESSAGE Hint 'jetzt schon'} {$IFEND}

{$IF xyz = 5} {$MESSAGE Hint 'xyz ist 5'} {$IFEND}
[add]
die D2010-Warungen sollten so wohl auch schon in/ab D2009 kommen


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:00 Uhr.
Seite 3 von 12     123 45     Letzte »    

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