Implicit string type conversion from "AnsiString" to "Unicod

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Implicit string type conversion from "AnsiString" to "Unicod

Beitrag von Mathias »

Wie kann ich diese Warnung umgehen ?

Code: Alles auswählen

embedded_gui_common.pas(39,42) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"


Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  Cfg: TXMLConfig;
begin
  Cfg := TXMLConfig.Create(nil);
  Cfg.Filename := 'config.xml';
  Cfg.SetDeleteValue(Name + '/Left/value', IntToStr(Left), '90');   // Hier kommt die Warnung.
  Cfg.Free;
end;

Lass ich "Name" weg.
Und wen ich IntTostr(...) durch eine String Konstante ersetzt, ist die Warnung weg.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von theo »

Kannst du das nochmal auf Deutsch formulieren?
Und was ist "Name"?

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von Mathias »

Name ist TForm1.Name.
Ich hoffe du verstehst jetzt, was ich meine.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von theo »

Mathias hat geschrieben:Ich hoffe du verstehst jetzt, was ich meine.


Nein. Ein Satz wie:
"Lass ich "Name" weg."
sagt mir nichts.

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von shokwave »

Hi,

wenn du die Meldung wegbekommen möchtest, ginge das z.B. so.

Code: Alles auswählen

    Cfg.SetDeleteValue(WideString(Name) + '/Left/value', Left, 90);
 

Parameter 1 ist ein DOMString, welcher einem XMLString entspricht, welcher wiederum als WideString definiert ist. Und so machst du aus einer impliziten Umwandlung, eine explizite.

Parameter 3 und 4 kann wahlweise ein DOMString, Integer oder boolean sein, deswegen kannst du direkt den Integer nehmen.
mfg Ingo

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von Mathias »

Danke, jetzt ist die Warnung weg. Dafür sieht es mit der Umwandlung etwas merkwürdig aus. 8)
Mit dem direkten Integer, wird es auch noch einfacher. :wink:

Code: Alles auswählen

 Cfg.SetValue(WideString(Name) + '/Left/value', Left); 


Das ...Delete... habe ich auch noch wegelassen, somit wird immer geschrieben, egal wie der Wert bei "value" ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von wp_xyz »

Ich habe nie verstanden, warum FPC in den XML-Units mit "widestring" arbeitet, anstatt einfach mit "string" wie überall.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von Mathias »

Ist da etwa vorgesehen, das man Umlaute den Pfaden mitgeben kann ?
Aber dies hätte man sicher auch mit den normalen UTF8 Strings lösen können.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von Winni »

Hi!

Nicht nur Umlaute und Artverwandtes - heutzutage kann man doch Smileys und alles andere
aus dem UTF8 Zeichensatz in Datei- oder Verzeichnisnamen benutzen.
Jedenfalls in Linux.

Und ja: Natürlich hätte man das mittels UTF8 lösen können.
Dazu braucht man kein WideString.

Winni

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von Mathias »

Ist Widestring nicht eine Altlast von Windows ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von wp_xyz »

... und von Delphi.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von Mathias »

Jetzt habe ich noch etwas festgestellt.
GetValue von der Unit XMLConf verwendet WideString.
In der Unit LazConfigStorage, wird in GetValue ein normaler String verwendet. :roll:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Implicit string type conversion from "AnsiString" to "Un

Beitrag von wp_xyz »

LazConfigStorage gehört zum Lazarus-Package LazUtils und ist damit unabhängig von den fpc xml Units und hat mit XMLConfig bis auf die Anwendung vom Code her nichts zu tun. Hab damit allerdings noch nie gearbeitet. Ich verwende normalerweise die Low-Level Routinen in laz2_dom, laz2_xml und laz2_xmlwrite, auch im Package LazUtils, die allesamt mit "normalen" Strings laufen.

Antworten