Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi VCL Unicode, AnsiString übergeben! (https://www.delphipraxis.net/163862-vcl-unicode-ansistring-uebergeben.html)

Mavarik 19. Okt 2011 14:23

VCL Unicode, AnsiString übergeben!
 
Hallo Zusammen...

Nachdem ich jetzt meine Software auf XE2 umgestellt habe, habe ich an vielen Stellen chinesische Schriftzeichen....

Das Problem liegt warscheinlich hier:

Delphi-Quellcode:
procedure TCustomMaskEditOwn.SetEditText(const Value: Ansistring);
begin
  if GetEditText <> Value then
  begin
    SetTextBuf(PChar(Value)); // <---
    CheckCursor;
  end;
end;
Wie unterdrücke ich beim Typcasten eine interpreation der Zeichen im String?
SetTextBuff erwartet nunmal eine PChar!

Mavarik :coder:

Bernhard Geyer 19. Okt 2011 14:25

AW: VCL Unicode, AnsiString übergeben!
 
Ändere deine Methodensignatur auf String.

DeddyH 19. Okt 2011 14:26

AW: VCL Unicode, AnsiString übergeben!
 
PChar = PAnsiChar bei Delphi < 2009, danach PWideChar. Wenn Du also einen AnsiString verwendest muss es dann wohl explizit PAnsiChar sein.

[edit] Oder besser so wie Bernhard sagt, auf jeden Fall nicht die Typen mischen. [/edit]

Mavarik 19. Okt 2011 14:30

AW: VCL Unicode, AnsiString übergeben!
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1131277)
Ändere deine Methodensignatur auf String.

Damit verlagere ich das Problem doch nur eine Stufe nach außen, oder?

Ich habe intern doch "nur" AnsiString.. Nur wenn ich mit der VCL "reden" will muss ich die ja an irgend einer Stelle mal von AnsiString an WideString zuweisen!

Mavarik

himitsu 19. Okt 2011 14:30

AW: VCL Unicode, AnsiString übergeben!
 
Oder den String in eine temporäre Variable vom Type String, bzw. bei Übergabe doppelt casten.
Delphi-Quellcode:
SetTextBuf(PChar(String(Value)));
.


Oder du stellst deinen Code auf Unicode um. :stupid:



Wenn du außerhalb einen AnsiString oder einen PAnsiChar an eine String/UnicodeString-Variable, bzw. an soeinen Parameter übergibst, dann konvertiert Delphi das automatisch.


Zitat:

habe ich an vielen Stellen chinesische Schriftzeichen....
Vermutlich?
Delphi sollte dir genau sagen, daß es dort ein Problem gibt. (es müßte eine Compiler-Warnung vorhanden sein)

Bernhard Geyer 19. Okt 2011 14:32

AW: VCL Unicode, AnsiString übergeben!
 
Zitat:

Zitat von Mavarik (Beitrag 1131281)
Damit verlagere ich das Problem doch nur eine Stufe nach außen, oder?

Ich habe intern doch "nur" AnsiString.. Nur wenn ich mit der VCL "reden" will muss ich die ja an irgend einer Stelle mal von AnsiString an WideString zuweisen!

Nicht ganz (Abgesehen davon das du "intern" auf Strings (=UnicodeString) umstellen solltest.
Einen AnsiString->Unicodestring "bestraft" dich der Compiler nur mit einer Compilerwarnung (Evtl. Datenverlust), aber Wandlung macht er korrekt. Bei P(Wide/Ansi)Char's kann er das nicht. Da müsstest du selbst mit Hilfsvariablen + 1-2 Codezeilen umschiffen.

Mavarik 19. Okt 2011 14:39

AW: VCL Unicode, AnsiString übergeben!
 
Zitat:

Zitat von himitsu (Beitrag 1131282)
Oder den String in eine temporäre Variable vom Type String, bzw. bei Übergabe doppelt casten.
Delphi-Quellcode:
SetTextBuf(PChar(String(Value)));
.


Oder du stellst deinen Code auf Unicode um. :stupid:



Wenn du außerhalb einen AnsiString oder einen PAnsiChar an eine String/UnicodeString-Variable, bzw. an soeinen Parameter übergibst, dann konvertiert Delphi das automatisch.


Zitat:

habe ich an vielen Stellen chinesische Schriftzeichen....
Vermutlich?
Delphi sollte dir genau sagen, daß es dort ein Problem gibt. (es müßte eine Compiler-Warnung vorhanden sein)

Ups... Der Text ist erst nach dem Quoten da.. Cool... Fehler in der DP?!

Warnings... ja :oops: noch 17900! Ich denke ich gebe es mal auf....

Mavarik

mquadrat 19. Okt 2011 14:41

AW: VCL Unicode, AnsiString übergeben!
 
17.900???? :shock:

Ach herrje.. Alles von der Unicode-Umstellung? Jeden Tag 1000, dann biste in knapp drei Wochen durch :D

himitsu 19. Okt 2011 14:46

AW: VCL Unicode, AnsiString übergeben!
 
War ich wohl schneller mit Editieren, als du mit dem Lesen :mrgreen:

Joar, bei uns in der Software gibt es auch noch gefühlte 2 Milliarden Warnungen, angefangen von nichtinitialisierten Variablen und Results, bis hin zu ein paar dieser Unicodewarnungen (bin auch schon fleißig am entfernen ... im FinalBuilder muß man manchmal ganz schön suchen, bis man den Fehler zwischen den unzähligen Warungen und Hinweisen findet ... das nervt etwas :? )

Mavarik 19. Okt 2011 14:47

AW: VCL Unicode, AnsiString übergeben!
 
Zitat:

Zitat von mquadrat (Beitrag 1131286)
17.900???? :shock:

Ach herrje.. Alles von der Unicode-Umstellung? Jeden Tag 1000, dann biste in knapp drei Wochen durch :D

Das Problem ist die Verschachtelung...

Das beseitigen einer Warnung zieht eine "Rattenschwanz" von Änderungen von Proc zu Proc nach sich...

Ach ja 64Bit kann ich überhaupt nicht compilieren... Da hagelt es nur Interne-Fehlermeldungen vom Compiler... Aber das ist eine andere Geschichte... *heul* 4 Wochen Arbeit... Ergebinss: Besser lassen!

Delphi 6 ist doch sehr schön...

Mavarik


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.
Seite 1 von 2  1 2      

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