AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

UnicodeString unbrauchbar

Ein Thema von SyntaxXx · begonnen am 9. Sep 2014 · letzter Beitrag vom 9. Sep 2014
Antwort Antwort
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#1

UnicodeString unbrauchbar

  Alt 9. Sep 2014, 18:30
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 ^^
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: UnicodeString unbrauchbar

  Alt 9. Sep 2014, 18:41
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..
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#3

AW: UnicodeString unbrauchbar

  Alt 9. Sep 2014, 18:45
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 *)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: UnicodeString unbrauchbar

  Alt 9. Sep 2014, 18:55
Also doch ein PChar.

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#5

AW: UnicodeString unbrauchbar

  Alt 9. Sep 2014, 19:01
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 *)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: UnicodeString unbrauchbar

  Alt 9. Sep 2014, 19:06
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 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

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
Das sollte nicht hämisch oder herablassend klingen. Ich war nur etwas verdutzt.

Geändert von Der schöne Günther ( 9. Sep 2014 um 19:13 Uhr) Grund: Rofl, was.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: UnicodeString unbrauchbar

  Alt 9. Sep 2014, 19:08
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#8

AW: UnicodeString unbrauchbar

  Alt 9. Sep 2014, 19:22
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 *)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: UnicodeString unbrauchbar

  Alt 9. Sep 2014, 19:25
Hallo- Hast du meinen Beitrag, wie man von einem wchar_t* nach char* übersehen?
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#10

AW: UnicodeString unbrauchbar

  Alt 9. Sep 2014, 19:41
Sry, habe deinen Beitrag wirklich glatt übersehen.

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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