std::wstring in input box anzeigen

Danke, das habe ich nun begriffen, aber leider sind meine Kenntnisse noch zu beschränkt um den Code richtig zu stellen.

Wie es scheint, muss ich auf MultiByteToWidechar() verzichten, aber ich hab' echt keinen Blassen wo ich nun beginnen soll?

Da Du ja den Grund für das Problem erkannt hast, kannst Du mir auch eine Lösung(sansatz) bieten? Wäre super!
 
Aus dem Quellcode Fragment kann man leider nur erahnen in welchem Kontext das verwendet werden soll.

InputBox( ... ) kann ich nicht nachvollziehen (Windows, Visual-Studio, .NET Framework und möglicherweise noch MFC ?)

C/C++ gibts ja in vielen Varianten ...

Wenn Visual-Studio in der Vollversion zur Verfügung steht würde ich generell bei Zeichenketten
Konvertier-Aktionen die ATL Konverter Makros empfehlen

z.B.
LPCSTR pszA = CW2A( pszW );

Um Speicher muss man sich wegen Klassenkonzept nicht weiter kümmern.
 
Hi.

Die Konvertierung in der CreateDlgControl Funktion ist falsch (zumindest wenn das Projekt auf Unicode gestellt ist):
C++:
    // title
    lpwsz = (LPWSTR)lpw;
    wcharlength = MultiByteToWideChar(CP_ACP, 0, caption, -1, lpwsz, 0);
    nchar = MultiByteToWideChar(CP_ACP, 0, caption, -1, lpwsz, wcharlength);
Hier wird versucht einen char-String in der aktuellen ANSI Codepage in einen wchar_t String zu übertragen. Das funktioniert natürlich nicht wirklich wenn der Quellstring eigentlich ein wide character String ist.

Fasse die Anweisungen in #ifdef ein:
C:
    // title
    lpwsz = (LPWSTR)lpw;
#if defined(_UNICODE) || defined(UNICODE)
    _tcscpy(lpwsz, caption);
    lpw += _tcslen(caption) + 1;
#else
    wcharlength = MultiByteToWideChar(CP_ACP, 0, caption, -1, lpwsz, 0);
    nchar = MultiByteToWideChar(CP_ACP, 0, caption, -1, lpwsz, wcharlength);
    lpw += nchar;
#endif
Gruß
 
Zurück