wchar_t kann nicht in char* konvertiert werden
-
Hallo zusammen,
Ich möchte das endlich mit den Zeigern verstehen. Ich habe folgendes gecodet:
System::String ^sRemotehost; sRemotehost=this->textBox_remotehost->Text->ToString(); char *remotehost = System::Char::Parse(sRemotehost);
Fehler:
'wchar_t' kann nicht in 'char *' konvertiert werden
Wieso kann ich den den remotehost-Pointer nicht auf das geparste Objekt zeigen lassen?
Gruss
flambert
-
Ich hab zwar von C++/CLI keine Ahnung und kenne System::Char nicht, aber probiers mal so:
wchar_t *remotehost = &System::Char::Parse(sRemotehost);
-
Das würde mir nichts bringen. Ich muss später eine Klasse initialisieren die ich nicht ändern darf:
Transceiver(unsigned int localport, char *remotehost, unsigned int remoteport, int streamid, int flags, long rbsize)
-
Stell dein Projekt doch von Unicode auf MBCS um.
-
Mein Projekt ist nicht Unicode. Bei der Einstellung "Zeichnsatz" steht bei mir "Multi-Byte-Zeichensatz verwenden". Meintest du das mit MBCS?
-
Ja, meinte ich.
Tja, wenn sRemotehost vom Typ wchar_t* ist und du char* brauchst, dann musst du wohl noch einen Puffer erzeugen und den Inhalt konvertieren und da reinkopieren.
-
Naja. Und wie macht man das? Ich weiß ja nicht wie groß der Puffer sein muss. Also kann ich ja kein char[] nehmen, oder?
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-158664.html
Da ist auch dein Fall dabei String^ nach const char*.
Simon
-
Klasse. Ich danke euch beiden. So ging es:
System::String ^sRemotehost; char *remotehost; remotehost = static_cast<char*> System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(sRemotehost).ToPointer());
Gruss
flambert
-
Benutz lieber gleich die ganzen Konvertierungsklassen, denn FreeHGlobal muss Du auch noch aufrufen.
Edit
Besiehungsweise benutz doch noch besser die unten im unteren Teil erwähnte marshal_as Library.Simon
-
Eigentlich wollte ich auch die marshal_as Library benutzen. Aber ich hab die bei mir auf dem System nicht gefunden. Also ich konnte die
#include <msclr/marshal.h> #include <msclr\marshal_cppstd.h>
nicht includen.
-
Hast Du nicht VS2008?
Simon
-
Doch. Ich benutze Visual C++ 2008 Express.
-
flambert schrieb:
#include <msclr/marshal.h> #include <msclr\marshal_cppstd.h>
Da würde ich eh von abraten.
Das macht man so nicht.
-
Freddy IV schrieb:
flambert schrieb:
#include <msclr/marshal.h> #include <msclr\marshal_cppstd.h>
Da würde ich eh von abraten.
Das macht man so nicht.Warum?
Wie würdest Du denn das machen?
Simon
-
Deswegen nicht...
http://www.codeproject.com/KB/mcpp/OrcasMarshalAs.aspx?display=PrintAll
-
Hmm.... in dem Artikel spricht doch alles dafür...
Zusammenfassend steht da:
That's it. Pretty straightforward to extend and to use.Deshalb auch der Verweis hier:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-158664.html