![]() |
Script Engines und Unicode in Delphi 2010
Hallo allerseits,
Ich benötige eine Script-Engine mit Unicode support. Bisher bin ich mit einem ![]() 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 |
Re: Script Engines und Unicode in Delphi 2010
Also bei mit ist PascalScript Unicodefähig
|
Re: Script Engines und Unicode in Delphi 2010
Also ich bekomme beim compilieren der Komponenten 60 String-Umwandlungs-Warnungen, was auf AnsiString hindeutet.
|
Re: Script Engines und Unicode in Delphi 2010
Wie verwendest du die Kompo?
|
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 ![]() |
Re: Script Engines und Unicode in Delphi 2010
|
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. |
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:
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!?
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; |
Re: Script Engines und Unicode in Delphi 2010
Zitat:
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. |
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!
|
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. |
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 |
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 |
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 |
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.
|
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.
|
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 |
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?
|
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 |
Re: Script Engines und Unicode in Delphi 2010
Zitat:
|
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