str->lpctstr
-
sry dass ich erst jetzt antworte.
hatte was zu tun.also habs jetzt so geschrieben
void f(LPCTSTR pstr); //Außerhalb von main()
und innerhalb von main:
typedef std::basic_string<TCHAR> MyStr; MyStr str("Hello"); f(str.c_str());
warnung kommt:
[SPOILER]1>c:\users\dominik\documents\visual studio 2008\projects\ogamebot\ogamebot\main.cpp(29) : error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it)': Konvertierung des Parameters 1 von 'const char [6]' in 'std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it' nicht möglich 1> with 1> [ 1> _Elem=wchar_t, 1> _Traits=std::char_traits<wchar_t>, 1> _Ax=std::allocator<wchar_t> 1> ] 1> Konstruktor für struct 'std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it' ist als 'explicit' deklariert 1> with 1> [ 1> _Elem=wchar_t, 1> _Traits=std::char_traits<wchar_t>, 1> _Ax=std::allocator<wchar_t> 1> ]
[/SPOILER]
-
So geht es:
typedef std::basic_string<TCHAR> MyStr; MyStr str(_T("Hello")); f(str.c_str());
Ist dir eigentlich klar was hier passiert?
Das typedef legt einfach einen string Typen an der TCHAR als char Typen annimmt. Das ist deshalb notwendig, da TCHAR entweder char oder wchar_t sein kann - also unicode oder nicht unicode. TCHAR ist eine Möglichkeit wie man sowohl unicode als auch nicht unicode anwendungen erstellen kann ohne den Code anpassen zu müssen.
_T() ist ein kleiner Trick. Denn "Hello" ist immer ein char*. Also nie unicode. L"Hello" wäre immer ein wchar_t* also immer Unicode. _T() macht nun je nachdem ob du als unicode oder nicht kompiliert daraus "Hello" oder L"Hello".
und LPCTSTR heisst nichts anderes als TCHAR const*
-
bammes schrieb:
und innerhalb von main:
typedef std::basic_string<TCHAR> MyStr; MyStr str("Hello"); f(str.c_str());
Das soll ja auch
MyStr str(_T("Hello"));
heißen. Bitte konsultiere die Dokumentation Deines Compilers bezüglich Zeichensätze, Unicode, TCHAR, _T, etc. Dieses TCHAR-Zeugs ist übrigens Compiler-spezifisch und kein Standard C++.
-
Shade Of Mine schrieb:
Denn "Hello" ist immer ein char*.
Wie wir in der Fehlermeldung sogar nachlesen können ist
"Hello"
vom Typconst char[6]
.
-
oke fehler _T Bezeichner wurde nicht gefunden
dann schau ich mal nach der Dokumentation wie man das ändert.
oder weis es auch einer von euch hab VC++ 2008 express
-
krümelkacker schrieb:
Shade Of Mine schrieb:
Denn "Hello" ist immer ein char*.
Wie wir in der Fehlermeldung sogar nachlesen können ist
"Hello"
vom Typconst char[6]
.ist aber viel einfach hier von char* und wchar_t* zu sprechen. ist viel leichter verständlich so und in diese Situation ist der Unterschied ja auch nicht relevant
@bammes:
hast du die windows.h inkludiert?
ansonsten schreib einfach selber L"Hello" statt _T("Hello")
-
Guck Dir doch einfach mal den Link an, den ich gepostet habe. Da gibts nämlich Lösungen für dein Problem.
-
hajo hab ich
typedef std::basic_string<TCHAR> MyStr; MyStr str(_T("Hello")); f(str.c_str());
-
_T kommt meines Wissens aus tchar.h, nicht windows.h.
-
achso oke es klappt
könnt ihr auch gleich helfen mit string in LPCWSTR?
-
theta schrieb:
Guck Dir doch einfach mal den Link an, den ich gepostet habe. Da gibts nämlich Lösungen für dein Problem.
Edit:
http://www.c-plusplus.net/forum/276277
http://www.c-plusplus.net/forum/viewtopic-var-t-is-260205-and-start-is-10.html
-
ach und konvertierung auf LPCTSTR von string klappt doch nicht.
habs vorhin falsch getestet.
folgende warnung wird ausgegeben:
1>c:\users\dominik\documents\visual studio 2008\projects\ogamebot\ogamebot\main.cpp(39) : error C2664: 'WritePrivateProfileStringW': Konvertierung des Parameters 3 von 'void (__cdecl *)(LPCTSTR)' in 'LPCWSTR' nicht möglich
-
Meine Glaskugel verrät mir, dass du versehentlich (?!) eine Funktionsdeklaration statt eines LPCTSTR erstellt hast.
bammes schrieb:
könnt ihr auch gleich helfen mit string in LPCWSTR?
Schau nochmal nach, was das W hier bedeutet und was das erste T in LPCTSTR bedeutet.