![]() |
UnicodeString unbrauchbar
Ich arbeite mich gerade ein wenig in C++ ein und stoße direkt auch ein Problem.
Eigentlich jede Methode in C++ verlangt ein Array of Char. Allerdings gibt Edit->Text einen UnicodeString zurück. Gibt es eine Möglichkeit, das im Compiler oder irgendwo umzustellen? Denn jedesmal bei dem Edit oder sonstwas den UnicodeString unständlich zu casten, macht irgendwie wenig Spaß. Andere Compiler in C++ benutzen keinen UnicodeString, und viele C++ Programmierer haben zudem noch nie was von nem UnicodeString gehört ^^ |
AW: UnicodeString unbrauchbar
Wirklich ein array of char?
Oder meinst du den PChar? Und nein, das kann man nicht umstellen, aber ein Cast nach PChar/PWideChar ist ja kein großer Akt. Die C++ler kennen bis stimmt den WideString, als SysAllocStr und Co.. |
AW: UnicodeString unbrauchbar
Oh verzeihung, das ist die Meldung, die ich bekomme:
[bcc32 Fehler] Unit1.cpp(32): E2034 Konvertierung von 'UnicodeString' nach 'const char *' nicht möglich Vollständiger Parser-Kontext Unit1.cpp(27): Analyse: void _fastcall TForm1::Button2Click(TObject *) |
AW: UnicodeString unbrauchbar
Also doch ein PChar. :stupid:
Wenn die Funktion einen PAnsiChar will, dann muss man zusätzlich noch nach ANSI casten, aber bei Unicode reicht ein PChar um den String drumrum. Nur bei Stringkonstanten wird automatisch gecastet. |
AW: UnicodeString unbrauchbar
Blödes Char und Ansi Zeug.
Also ich habe jetzt das gemacht, was du gesagt hast. Um den String ein PChar. Jetzt sieht es so aus:
Code:
Nun kommt folgende Meldung:
FILE* file = fopen(PChar(Edit1->Text), "rb");
[bcc32 Fehler] Unit1.cpp(32): E2031 Typumwandlung von 'UnicodeString' nach 'wchar_t *' nicht zulässig Vollständiger Parser-Kontext Unit1.cpp(27): Analyse: void _fastcall TForm1::Button2Click(TObject *) |
AW: UnicodeString unbrauchbar
Zitat:
Ich weiß nicht mit was für Bibliotheken du arbeitest, aber eigentlich ist
Delphi-Quellcode:
der Standardtyp.
wchar_t
Ansonsten ist es wie gehabt in Delphi: Wenn du einen UnicodeString hast und etwas erwartet einen AnsiString musst du ihn mit Gewalt darauf heruntercasten. Im Embarcadero C++-Builder zeigt der Alias _TCHAR entweder auf char oder wchar_t, je nachdem was du in den Projektoptionen eingestellt hast. Wie in Delphi. Nur dass man es da nicht einstellen kann :-D UnicodeString ist in C++ eine Klasse, die Methode c_str() gibt ein wchar_t-Array zurück. Beim AnsiString ist das sinnvollerweise dann ein char-Array. Im Beispiel eine Konsolenanwendung:
Code:
#include <vcl.h>
#include <windows.h> #pragma hdrstop #pragma argsused #include <tchar.h> #include <stdio.h> #include <iostream> void myCharFunc(char* myChar) { std::cout << "myChar sagt " << myChar; } void myFunc(_TCHAR* myTChar) { std::wcout << "myTChar sagt " << myTChar ; } int _tmain(int argc, _TCHAR* argv[]) { UnicodeString myStr = "Hallo Welt"; myFunc(myStr.c_str()); // myCharFunc(myStr.c_str()); // nope std::cout << '\n'; myCharFunc( AnsiString(myStr).c_str() ); getchar(); return 0; } // Edit Zitat:
|
AW: UnicodeString unbrauchbar
Hallo,
Versuch mal ob das hier geht (keine Garantie, bin auch kein Experte und hab grad kein C++ drauf)
Code:
Davon abgesehen castet man in c++ nicht so:
FILE* file = fopen(&Edit1->Text[1], "rb");
PChar(x) sondern so (PChar)x |
AW: UnicodeString unbrauchbar
Code:
Funktioniert auch nicht.
FILE* file = fopen(&Edit1->Text[1], "rb");
Meldung: [bcc32 Fehler] Unit1.cpp(32): E2034 Konvertierung von 'wchar_t *' nach 'const char *' nicht möglich Vollständiger Parser-Kontext Unit1.cpp(27): Analyse: void _fastcall TForm1::Button2Click(TObject *) |
AW: UnicodeString unbrauchbar
Hallo- Hast du meinen Beitrag, wie man von einem
Delphi-Quellcode:
nach
wchar_t*
Delphi-Quellcode:
übersehen?
char*
|
AW: UnicodeString unbrauchbar
Sry, habe deinen Beitrag wirklich glatt übersehen.
Code:
Funktioniert :thumb:
FILE* file = fopen(AnsiString(Edit1->Text).c_str(), "rb");
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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 by Thomas Breitkreuz