'std::string' to 'LPCH'



  • Die Win32-API ist kein C++ sondern C.
    Somit musst Du via C darauf zugreifen... da führt nun mal kein Weg daran vorbei.... Du kannst natürlich auch C++ so verwenden wie C, aber dazu musst Du es gut verstehen, wie diese beiden Welten zusammenpassen. Das geht beim "string" z.B. hier mit "buffer()", wenn DU vorher genügend Platz reserviert hast...

    Aber leider ist C++ (STL) nit TCHAR-Konform... somit wirst Du spätestens mit einem Unicode-Projekt Probleme bekommen... deswegen TCHAR...



  • Vielleicht könnte das Abhilfe schaffen:

    typedef std::basic_string<TCHAR> String;
    

  • Mod

    ƒred schrieb:

    Vielleicht könnte das Abhilfe schaffen:

    typedef std::basic_string<TCHAR> String;
    

    Nö. Man kann leider einen std::basic_string<TCHAR> eben nicht in einen TCHAR* umwandeln.



  • Martin Richter schrieb:

    Nö. Man kann leider einen std::basic_string<TCHAR> eben nicht in einen TCHAR* umwandeln.

    Warum funktioniert basic_string::c_str an dieser Stelle nicht?



  • Der Rückgabewert von c_str() ist const.



  • Martin Richter schrieb:

    Nö. Man kann leider einen std::basic_string<TCHAR> eben nicht in einen TCHAR* umwandeln.

    Nicht "umwandeln" aber doch zugreifen via "buffer()"



  • Registrierter Troll schrieb:

    Der Rückgabewert von c_str() ist const.

    Ja schon, aber man kann den c_str ja immer noch nach TCHAR[] kopieren... das kann ja kein Argument gegen C++ Strings in Win32-Code sein.



  • ƒred schrieb:

    Ja schon, aber man kann den c_str ja immer noch nach TCHAR[] kopieren... das kann ja kein Argument gegen C++ Strings in Win32-Code sein.

    Hier geht es um Schreibzugriffe. GetModuleFilename schreibt in den String. In const-Strings zu schreiben ist keine gute Idee.

    Jochen Kalmbach schrieb:

    Nicht "umwandeln" aber doch zugreifen via "buffer()"

    Die Funktion kenne ich gar nicht und finde auch nichts darüber. Zu was gehört die?



  • Ja, es scheint so, als ob ich das mit dem CString verwechselt habe... da gibt es ein "GetBuffer":
    http://msdn.microsoft.com/en-us/library/aa314880

    Sorry für die Verwirrung...



  • Hier beissen sich einige Dinge. Die Schnittstelle von WinApi ist C, nicht C++. Ein an WinApi übergebener String muss also so sein, wie die Funktionen von WinApi ihn erwarten. Mit irgendwelchen Standardklassen von C++ kann WinApi heute noch nichts anfangen.


  • Mod

    AlterProgrammierer schrieb:

    Hier beissen sich einige Dinge. Die Schnittstelle von WinApi ist C, nicht C++. Ein an WinApi übergebener String muss also so sein, wie die Funktionen von WinApi ihn erwarten. Mit irgendwelchen Standardklassen von C++ kann WinApi heute noch nichts anfangen.

    Aber CString::GetBuffer bzw. CStrBuf kommen prima mit den WinAPI Funktionen klar.



  • Martin Richter schrieb:

    Aber CString::GetBuffer bzw. CStrBuf kommen prima mit den WinAPI Funktionen klar.

    Die transformieren nach C und sind damit für WinApi kompatibel. Wem die auf C eingerichtete WinApi zu restriktiv ist, möge MFC oder VCL einsetzen. Ich wünsche mir da keine grossen Änderungen an der WinApi.


Anmelden zum Antworten