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.