Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ UnicodeString unbrauchbar (https://www.delphipraxis.net/181796-unicodestring-unbrauchbar.html)

SyntaxXx 9. Sep 2014 17:30

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 ^^

himitsu 9. Sep 2014 17:41

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..

SyntaxXx 9. Sep 2014 17:45

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 *)

himitsu 9. Sep 2014 17:55

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.

SyntaxXx 9. Sep 2014 18:01

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:
FILE* file = fopen(PChar(Edit1->Text), "rb");
Nun kommt folgende Meldung:
[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 *)

Der schöne Günther 9. Sep 2014 18:06

AW: UnicodeString unbrauchbar
 
Zitat:

Zitat von SyntaxXx (Beitrag 1271873)
Andere Compiler in C++ benutzen keinen UnicodeString, und viele C++ Programmierer haben zudem noch nie was von nem UnicodeString gehört ^^

Rofl, was?

Ich weiß nicht mit was für Bibliotheken du arbeitest, aber eigentlich ist
Delphi-Quellcode:
wchar_t
der Standardtyp.


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:

Zitat von Der schöne Günther (Beitrag 1271882)
Rofl, was?

Das sollte nicht hämisch oder herablassend klingen. Ich war nur etwas verdutzt.

Neutral General 9. Sep 2014 18:08

AW: UnicodeString unbrauchbar
 
Hallo,

Versuch mal ob das hier geht (keine Garantie, bin auch kein Experte und hab grad kein C++ drauf)
Code:
FILE* file = fopen(&Edit1->Text[1], "rb");
Davon abgesehen castet man in c++ nicht so:

PChar(x)

sondern so

(PChar)x

SyntaxXx 9. Sep 2014 18:22

AW: UnicodeString unbrauchbar
 
Code:
FILE* file = fopen(&Edit1->Text[1], "rb");
Funktioniert auch nicht.
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 *)

Der schöne Günther 9. Sep 2014 18:25

AW: UnicodeString unbrauchbar
 
Hallo- Hast du meinen Beitrag, wie man von einem
Delphi-Quellcode:
wchar_t*
nach
Delphi-Quellcode:
char*
übersehen?

SyntaxXx 9. Sep 2014 18:41

AW: UnicodeString unbrauchbar
 
Sry, habe deinen Beitrag wirklich glatt übersehen.

Code:
FILE* file = fopen(AnsiString(Edit1->Text).c_str(), "rb");
Funktioniert :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 Uhr.

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