CString in LPWSTR



  • Ich bekomme es nicht gebacken einen CString in LPWSTR umzuwandeln.
    Geht das? Und geht es auch andersherum?

    Nelly


  • Mod

    Es gibt dazu schöne ATL Makros.

    Bis VS.NET kannst Du folgendes machen:

    USES_CONVERSION;
    CString str = _T("TEST");
    FunktionMitLPCWSTR(T2W(str));
    

    In den .Net Versionen

    CString str = _T("TEST");
    FunktionMitLPCWSTR(CT2W(str));
    

    Zudem gibt es in den .NET Versionen zwei explizite CString Typen: CStringA und CStringW. CString mappt auf die entsprechende CStringA/W Klasse je nach UNICODE Setting.



  • Cstring verwaltet je nach UNICODE-Einstellungen entweder char's oder wchar_t's und besitzt einen operator LPTSTR (generisch wahlweise char* oder wchar_t* = LPWSTR), um einen nackten Pointer auf seine Daten bereitzustellen. Das heißt, du mußt dein Projekt auf UNICODE einstellen, dann klappt es mit folgender Konstruktion:

    CString text = L"hallo Welt";// (das L steht für UNICODE-Literale)
    LPWSTR ptr = text;
    *ptr = L'H';
    ...
    

    PS: arbeite besser mit CString - das ist um Längen sicherer als die Pointer-Verwaltung.


  • Mod

    CStoll schrieb:

    CString text = L"hallo Welt";// (das L steht für UNICODE-Literale)
    LPWSTR ptr = text;
    *ptr = L'H';
    ...
    

    Ist hier die T-Notation nicht grundsätzlich vorzuziehen oder, wenn schon pur Unicode dann nicht auch CStringW verwenden?
    Obiger code ist von den Projekteinstellungen abhängig. Finde ich persönlich nicht ganz so prickelnd.

    Zudem geht das gar nicht weil der Zeiger ein const ist!

    Geht immer:

    CStringW text = L"hallo Welt";LPWSTR ptr = text;
    ...
    

    Geht auch immer:

    CString text = _T("hallo Welt");
    USES_CONVERSION;
    LPWSTR ptr = T2W(text);
    ...
    


  • Mein CString wird aus einem Editfeld versorgt. Ich arbeite also nicht mit
    L"..". Hat das Auswirkung? :schland:


  • Mod

    Nelly schrieb:

    Mein CString wird aus einem Editfeld versorgt. Ich arbeite also nicht mit
    L"..". Hat das Auswirkung? :schland:

    Du hast nicht verstanden was UNICODE ist. Dein Edit Control könnte UNICODE oder MBCS Daten liefern. L"" ist eine Sparchdefinition für UNICODE String Konstanten.

    Mach Dich schlau über UNICODE und MBCS!


Anmelden zum Antworten