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

    Diese 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 Funktionsformat
    

    Daraufhin 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


Anmelden zum Antworten