std::string to LPCTSTR



  • Hallo, ich bin Anfänger und stelle eine alte (VC6) Anwendung auf einen Platform unabhängigen Standard um.

    Ich verwende unicode std::strings

    An einer Stelle kommt folgender Fehler:

    `

    Severity Code Description Project File Line Suppression State

    Error C2664 'CMutex::CMutex(const CMutex &)': cannot convert argument 2 from 'std::string' to 'LPCTSTR' Projekt c:\pfad\datei.cpp 11

    `

    Der Code sieht so aus:

    #include <afxmt.h> // wahrscheinlich ist es dieses include
    CMutex theMutex(false,mutexName);
    

    Wie kann ich den namen in die richtige Klasse konvertieren?



  • Wenn ich das auf den ersten Blick richtig sehe, ich CMutex teil der Win API. Damit wäre das dann nicht Plattform unabhängig.

    Ansonsten:

    CMutex theMutex(false,mutexName.c_str());
    


  • LPCTSTR ist, je nachdem, ob das UNICODE-Makro definiert ist, const wchar_t*, ansonsten const char*.

    Ich verwende unicode std::strings

    Das bedeutet, du verwendest UTF8? Dann konvertierst du den UTF8-String in einen wchar_t-String bzw, UTF16, da unter Windows wchar_t eine UTF16-Codeeinheit ist.

    Plattformunabhängig ist CMutex nicht, verwende lieber std::mutex, wenn es passt.



  • Schlangenmensch schrieb:

    Wenn ich das auf den ersten Blick richtig sehe, ich CMutex teil der Win API. Damit wäre das dann nicht Plattform unabhängig.

    Ansonsten:

    CMutex theMutex(false,mutexName.c_str());
    

    Richtig, das ist WinAPI, ich ändere es nach und nach. Threads möchte ich erst später machen. Ich kann das im Moment auch nicht.

    Jetzt steht can't convert to const char *

    Ich stelle auf wxWidgets um und könnte die String Funktionen von wxWidgets 3.1 nutzen, falls es hilft.



  • CMutex theMutex(false, CString(mutexName.c_str()));
    


  • hustbaer schrieb:

    CMutex theMutex(false, CString(mutexName.c_str()));
    

    Besten Dank, hat wunderbar funktioniert.


Anmelden zum Antworten