Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Script Engines und Unicode in Delphi 2010 (https://www.delphipraxis.net/150148-script-engines-und-unicode-delphi-2010-a.html)

Patrick 8. Apr 2010 16:17


Script Engines und Unicode in Delphi 2010
 
Hallo allerseits,

Ich benötige eine Script-Engine mit Unicode support. Bisher bin ich mit einem Uralt-Teil ganz gut unterwegs gewesen. Jetzt werden die Scripte aber um die 600 Zeilen lang, und aufgrund von Unicode-support sehr langsam.
Ich hatte mir also mal die RemObjects Pascal Script Engine angeschaut. Aber hier (wie bei vielen anderen Komponenten leider auch) wird zwar mit "Unicode-Support" geworben, aber drin ist leider nur "AnsiString". Also auf Unicode-Support kann ich erstmal verzichten, aber ich brauche ne schnellere Ausführung.

Dazu meine Fragen:
Wenn ich RemObjects compiliere, oder die alte Script-Engine auf AnsiString umstelle spuckt der Compiler lauter String-Umwandlungs Warnungen aus. Was ja an für sich logisch ist, da alle Delphi-Funktion zum manipulieren von Strings (z.B. Delete, Copy, StringReplace, usw...) unter Delphi 2010 auf WideStrings ausgelegt sind. Aber habe ich dann überhaupt noch die Möglichkeit unter Delphi 2010 bestimmte Komponenten in nativ AnsiString zu programmieren?

Kennt denn irgendjemand ne Script-Engine, die ein Unicode-Scripte ausführen kann?

Patrick

mkinzler 8. Apr 2010 16:25

Re: Script Engines und Unicode in Delphi 2010
 
Also bei mit ist PascalScript Unicodefähig

Patrick 8. Apr 2010 16:28

Re: Script Engines und Unicode in Delphi 2010
 
Also ich bekomme beim compilieren der Komponenten 60 String-Umwandlungs-Warnungen, was auf AnsiString hindeutet.

mkinzler 8. Apr 2010 16:36

Re: Script Engines und Unicode in Delphi 2010
 
Wie verwendest du die Kompo?

s.h.a.r.k 8. Apr 2010 16:54

Re: Script Engines und Unicode in Delphi 2010
 
Es gibt hier in der DP doch auch so ein eine Skript-Engine, die von einem Schüler entwickelt wurde. Mir fällt nur deren Namen nicht wirklich ein...

// edit

Habs doch noch gefunden :mrgreen:

mkinzler 8. Apr 2010 16:57

Re: Script Engines und Unicode in Delphi 2010
 
Nicht zu vergessen die vom kleinen Dave
http://www.delphipraxis.net/internal...t.php?t=165328

s.h.a.r.k 8. Apr 2010 16:58

Re: Script Engines und Unicode in Delphi 2010
 
@mkinzler: diese version ist sogar unicode fähig.

bei rutis habe ich leider keinerlei info bisher gefunden.

Patrick 9. Apr 2010 08:37

Re: Script Engines und Unicode in Delphi 2010
 
@mkinzler

Was heißt, wie verwende ich die Komponente?
In den Samples befindet ein "TestApplication" Projekt, was ich compiliert habe. Benutzt werden hier nur die PSScript und die PS3DllPlugin Componenten. der relevante Code schaut so aus
Delphi-Quellcode:
procedure TForm1.Compile1Click(Sender: TObject);
  procedure OutputMessages;
  var
    l: Longint;
    b: Boolean;
  begin
    b := False;

    for l := 0 to PSScript.CompilerMessageCount - 1 do
    begin
      Memo2.Lines.Add('Compiler: '+ PSScript.CompilerErrorToStr(l));
      if (not b) and (PSScript.CompilerMessages[l] is TIFPSPascalCompilerError) then
      begin
        b := True;
        Memo1.SelStart := PSScript.CompilerMessages[l].Pos;
      end;
    end;
  end;
begin
  Memo2.Lines.Clear;
  PSScript.Script.Assign(Memo1.Lines);
  Memo2.Lines.Add('Compiling');
  if PSScript.Compile then
  begin
    OutputMessages;
    Memo2.Lines.Add('Compiled succesfully');
    if not PSScript.Execute then
    begin
      Memo1.SelStart := PSScript.ExecErrorPosition;
      Memo2.Lines.Add(PSScript.ExecErrorToString +' at '+Inttostr(PSScript.ExecErrorProcNo)+'.'+Inttostr(PSScript.ExecErrorByteCodePosition));
    end else Memo2.Lines.Add('Succesfully executed');
  end else
  begin
    OutputMessages;
    Memo2.Lines.Add('Compiling failed');
  end;
end;
Gibt es denn keine Möglichkeit unter Delphi 2010 mit AnsiStrings zu arbeiten. Kann doch eigentlich nicht sein, dass alle Funktionen, die Delphi bereitstellt nur noch mit WideStrings arbeiten!?

himitsu 9. Apr 2010 09:07

Re: Script Engines und Unicode in Delphi 2010
 
Zitat:

Zitat von Patrick
Gibt es denn keine Möglichkeit unter Delphi 2010 mit AnsiStrings zu arbeiten. Kann doch eigentlich nicht sein, dass alle Funktionen, die Delphi bereitstellt nur noch mit WideStrings arbeiten!?

Das zählt zur bescheuertsten Unicodeumsetzung, welche eigentlich Erleichterung für den uimstieg bieten sollten.

Alles wurde erstmal auf Unicode umgestellt (selbst Funktionen wie AnsiSameString sind Unicode).
Erst wenn man z.B. die Unit AnsiStrings einbindret, findet man auch soclhe Funktionen als ANSI.

Ich hätte die eher/lieber an der bekannten Stelle gelassen und alles nur überladen.

mkinzler 9. Apr 2010 10:25

Re: Script Engines und Unicode in Delphi 2010
 
Dann würde es mindestens 30 Jahre dauern, bis alle auf Unicode umstellen. Sieht man ja an der BDE die trotz zunehmenden Problemen mit neueren BS Versionen nicht totzukriegen ist. Man muss die Leute zum Umstieg zwingen!

himitsu 9. Apr 2010 11:51

Re: Script Engines und Unicode in Delphi 2010
 
Umsteigen ist so ja kein großes Problem, aber neu Schreiben oder an den Stellen, wo es kein Unicode sein soll.

Vorallem bei der Datenspeicherung und Datenübertragung ist Unicode gegenüber den Single- und Multibytezeichensätzen oftmals im Nachteil. Im europäischen Sprachraum dürfte Unicode locker 45% mehr Speicherverbrauch und Rechenzeit ausmachen, gegenüber UTF-8 und 50% bei Ansi und Co.

olee 9. Apr 2010 11:54

Re: Script Engines und Unicode in Delphi 2010
 
Da meine RUTIS Engine hier genannt wurde kann ich dazu auch mal ein Statement abgeben:

NEIN, RUTIS unterstützt derzeit keine WideStrings, jedoch könnte ich dies auf Nachfrage innerhalb kürzester Zeit erledigen.

Ist nichts weiter als grad nen neuen Internen-Typ und ein paar konvertierungsfunktionen zu Implementieren.

Wenn das eine Hilfe wäre könnte ich das in null komma nix erledigen (denke ich :mrgreen:)

Das ganze hat sogar so mein Interesse geweckt, das ich auch ohne nachfrage vermutlich WideStrings einbauen werde :zwinker:

MFG

mkinzler 9. Apr 2010 11:58

Re: Script Engines und Unicode in Delphi 2010
 
Achtung: WideString <> UnicodeString in Delphi ab 2010!
Das erster ist ein OLE-Datentyp und kein nativer Delphityp ( Referenzzählung usw); UnicodeString dagegen schon

olee 9. Apr 2010 12:02

Re: Script Engines und Unicode in Delphi 2010
 
Mir ist auch grad eines eingefallen, als ich mal nachgekuckt hab, wie sich das einbauen ließe.

Die Verwendung in der Engine ist kein Problem.

Aber... die Eingabe der Strings ist das Problem. D.h. das man Unicode-Strings schon im Quelltext verwenden kann.

Wenn es nur darum ginge, das man die Unicode-Strings aus Externen-Funktionen und nicht aus dem Quelltext bezieht, wäre das ganze sehr sehr schnell erledigt.

Aber das man im Quelltext Unicode schreiben könnte, das wäre natürlich ne andere Sache.

Aber ein Script, das nur Daten von iwo anders als Unicode einließt (über Externe-Methoden), verarbeitet und wieder ausgibt, das ist kein Problem.

EDIT: Aber erstmal müsste ich wissen, was für Strings denn jetzt wirklich gemeint sind - ich habe nämlich bisher eig nur AnsiStrings verwendet

MFG

mkinzler 9. Apr 2010 12:13

Re: Script Engines und Unicode in Delphi 2010
 
UnicodeString wurde erst ab D2009 eingeführt. Dies ist der neue Standdardstringtyp, dh.h. string wird als UnicodeString behandlet. WideString gab es schon früher ist aber langsamer und wie gesagt kein nativer Typ.

himitsu 9. Apr 2010 12:36

Re: Script Engines und Unicode in Delphi 2010
 
Notfalls kannst du dein RUTIS auch "nur" auf UTF-8 umstellen oder für Stringangaben innerhalb des Scriptes UTF-8 zur Verfügung stellen.

olee 9. Apr 2010 12:54

Re: Script Engines und Unicode in Delphi 2010
 
Also ist damit jetzt der Type WideString gemeint oder was?

Oder gibt es noch einen Typ der anders heißt?

Das ist es was ich wissen muss.

Naja, wie auch immer. Ich habe mal grad den typ WideString eingebaut und er funktioniert.

War sogar etwas mehr arbeit als ich dachte, alles in allem aber kein Problem :wink:

Wenn bedarf besteht lade ich diese neuste Änderung mal hoch - ansonsten würde das wohl ein paar tage dauern bis ich das hochlade, da ich eigentlich nicht mehr so sehr an RUTIS arbeite, sondern an einem größeren Projekt, das RUTIS verwendet. Das ist aber noch ein Geheimnis, um was für ein Projekt es sich da handelt. Ich kann nur sagen, das es jetzt schon "derbst geil" ist :mrgreen:

MFG

Uwe Raabe 9. Apr 2010 12:59

Re: Script Engines und Unicode in Delphi 2010
 
Vielleicht habe ich es ja übersehen, aber erlaube mir die Frage: ist die Rutis-Engine überhaupt unter D2010 compilierbar und lauffähig?

olee 9. Apr 2010 13:04

Re: Script Engines und Unicode in Delphi 2010
 
Wär schön wenn du mir die Frage beantworten könntest :lol:

Ich habe leider keine Ahnung ob dem so ist, da ich es bisher nicht testen konnte.

Da ich nur mit Turbo Delphi arbeite, konnte ich diese Frage bisher nicht klären.

Aber ich denke das sollte nicht allzu grße Probleme bereiten.

MFG

Uwe Raabe 9. Apr 2010 13:20

Re: Script Engines und Unicode in Delphi 2010
 
Zitat:

Zitat von olee
Wär schön wenn du mir die Frage beantworten könntest :lol:

Vielleicht finde ich ja etwas Zeit dafür...

himitsu 9. Apr 2010 13:22

Re: Script Engines und Unicode in Delphi 2010
 
Ab Delphi 2009 gibt es noch einen String, welcher sich UnicodeString nennt, dieser wird intern wie der alte AnsiString verwaltet.

Bis Delphi 2007 war String eine Weiterleitung an den AnsiString (Char=AnsiChar, PChar=PAnsiChar und String=AnsiString)
und seit Delphi 2009 wird der String an den UnicodeString weitergeleitet (Char=WideChar, PChar=PWideChar und String=UnicodeString).

WideString ist nur eine Umleitung an einen OLE-String, welcher eigentlich von der OleAuth.dll verwaltet wird und auch über deren Speichermanager läuft.


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