Unicode Problem ->"unsigned short [1024] in char *"
-
Guten Tag,
Ich versuche eine vorhandene MFC Anwendung komplett unicodefähig zu machen
Nachdem ich mich durch hunderte von Fehlern gekämpft habe, sind nur noch wenige Fehler übrig ;-). Leider weiß ich nicht wie ich folgenden Fehler beheben kann.
Ich verwende Visual Studio 6.0Diese Methode macht mir Kopfschmerzen:
CHfxProfileArchive& CHfxProfileArchive::operator >>( CString& str ) { ASSERT( m_nAccessMode == Load); //get string char c[1024]; m_pstrBuffer->get( c, 1024, cDelim); str = c; ReadDelim(); return *this; }diese würde ich gerne unicodefähig bekommen.
Ich habe dazu das "char" durch "TCHAR" ersetzt:CHfxProfileArchive& CHfxProfileArchive::operator >>( CString& str ) { ASSERT( m_nAccessMode == Load); //get string TCHAR c[1024]; m_pstrBuffer->get( c, 1024, cDelim); str = c; ReadDelim(); return *this; }Danach gibt es aber folgendes Problem bei dieser Stelle:
m_pstrBuffer->get( c, 1024, cDelim);...error C2664: 'class istream &__thiscall istream::get(char *,int,char)' : Konvertierung des Parameters 1 von 'unsigned short [1024]' in 'char *' nicht moeglich Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder FunktionsformatDaraufhin habe ich mit dem Macro W2A(...) gearbeitet und es funktionierte trotzdem nicht:
CHfxProfileArchive& CHfxProfileArchive::operator >>( CString& str ) { ASSERT( m_nAccessMode == Load); //get string TCHAR c[1024]; USES_CONVERSION; m_pstrBuffer->get( W2A(c), 1024, cDelim); str = c; ReadDelim(); return *this; }m_pstrBuffer ist so definiert:
// Attributes protected: strstream* m_pstrBuffer;Würde mich sehr freuen, wenn mir Jemand von Euch einen Tipp zur Lösung des Problems geben könnte.
Erst einmal herzlichen Dank fürs Durchlesen
Gruß skontox
-
Du könntest erstmal das char rausholen und dann in einer Schleife zeichenweise die Elemente des Feldes nach wchar_t casten und dann mit += immer an deinen CString ranhängen.
Gibt aber glaube auch irgendeine API-Funktion, die das Umwandeln macht.
-
Die Funktion heisst
mbstowcs(wchar_t*, const char*,size_t);
Vile Glück, hatte dieses Problem auch schonmal.
Richtig mühsam.
-
strstream verwendet halt "char".
Somit lass das auslesen als "char" und wandle es dann erst *nach* dem auslesen in den CString um... (via CA2T)
-
std::wstringstream
-
Herzlichen Dank für Eure Tipps!

Ich werde mir das jetzt mal genauer anschauen, ob ich das Problem nun Dank eurer Antworten lösen kann.Gruß skontox