convert LPTSTR to std::string



  • hallo leute,
    wie konvertiert man convert LPTSTR to std::string?
    ciao



  • Gar nicht 😉

    ZUnächst mußt du dir klarmachen, was LPTSTR ist - je nach Einstellungen verbirgt sich dahinter entweder char* oder wchar_t*, die du mit einer Zuweisung an einen std::string bzw. std::wstring übergeben kannst. (wenn du unabhängig von den Compiler-Einstellungen sein willst, setz ein typedef std::basic_string<TCHAR> tstring; an den Programmanfang und arbeite danach mit 'tstring')



  • Hi!

    LPTSTR ist nur ein typedef für char*, also sollte man es einem std::string ganz einfach übergeben können:

    LPTSTR lptStr = "Hallo Welt";
    std::string str = lptStr; // oder std::string str(lptStr);
    

    Ich glaube LPTSTR kann auch wchar_t* sein, dann musst du std::wstring nehmen. Ansonsten mal hier im Forum suchen bezüglich der Konvertierung zwischen char und wchar_t.

    Greetz



  • warum geht das dann nicht?

    LPTSTR pMessageBuffer;
    
    ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
    				NULL,
    				errorCode_,
    				MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    				reinterpret_cast<LPTSTR>(&pMessageBuffer),
    				0,
    				NULL);
    
    std::string errorMessage(pMessageBuffer);
    
    ::LocalFree(pMessageBuffer);
    
    error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it)' : cannot convert parameter 1 from 'LPTSTR' to 'std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it'
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>,
                _Ax=std::allocator<char>
            ]
            Constructor for struct 'std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it' is declared 'explicit'
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>,
                _Ax=std::allocator<char>
            ]
    


  • hm das liegt an unicode 😕



  • Vellas schrieb:

    Ich glaube LPTSTR kann auch wchar_t* sein, dann musst du std::wstring nehmen. Ansonsten mal hier im Forum suchen bezüglich der Konvertierung zwischen char und wchar_t.

    ^^ genau das hier dürfte dein Problem sein.
    Schau dir einfach mal die Projektoptionen an, welche Makros der Compiler vordefiniert - wenn dort "UNICODE" dabeisteht, ist LPTSTR ein wchar_t* und du mußt dir überlegen, wie du den umwandeln kannst (oder umsteigen auf wstring).



  • hi,
    ja es stand vorher unicode!
    mit mutibytecode gehts wunderbar...
    danke


Anmelden zum Antworten