Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#4

AW: Unicode und WideChar API-Funktionen

  Alt 28. Mär 2023, 23:15
Das Eingangsbeispiel ist wohl etwas zu knapp ausgefallen ist. Hier ein etwas längeres, das die Problematik (hoffentlich) besser verdeutlicht:
Delphi-Quellcode:
program project1;

{$MODE DELPHI}

uses Classes, SysUtils, CustApp, Windows, IniFiles;

type
  TMyApplication = class(TCustomApplication)
  private
    FStr: WideString;
    FValue: WideString;
    FFileName: WideString;
  [...]
  end;

procedure TMyApplication.DoRun;
begin
  [...]
  FFileName:= 'C:\irgendeine.ini';
  FIni:= TIniFile.Create(FFileName); // <--
  try
    FValue:= FIni.ReadString('foo', 'bar', 'blub'); // <--
    SetLength(FStr, 32768);
    SetLength(FStr, ExpandEnvironmentStringsW(PWideChar(FValue), @FStr[1], Length(FStr))-1);
  finally
    FIni.Free;
  end;
  WriteLn(FStr);
  ReadLn;
end;
Die markierten Zeilen werfen folgende Warnungen:
Code:
Compile Project, Mode: Debug, Target: project1.exe: Success, Warnings: 2
project1.lpr(55,35) Warning: Implicit string type conversion with potential data loss from "WideString" to "AnsiString"
project1.lpr(57,18) Warning: Implicit string type conversion from "AnsiString" to "WideString"
Das heißt, selbst wenn ich explizit WideString nutze, renne ich gegen eine andere Wand. Das muss doch besser gehen.

Grüße
Dalai
  Mit Zitat antworten Zitat