Veröffentlicht 11. Februar 200916 j Hallo, ich möchte einen string in LPCTSTR konvertieren.Brauche es für den unten stehenden Code. SetCurrentDirectory will ja LPCTSTR. Gibt es da eine einfache Möglichkeit? string unterordner; unterordner = s[1] + s[2] + s[3]; if(connection_pointer->SetCurrentDirectory(unterordner))
11. Februar 200916 j LPCTSTR ist je nach Projekteinstellungen, const char* oder const wchar_t*. Im ersten Fall kannst du einfach unterordner.c_str() benutzen, im zweiten Fall musst du den String umwandeln (MultiByteToWideChar) oder wstring benutzen.
12. Februar 200916 j Moin, also bei cout << "Wechsel in das Verzeichnis erfolgreich\n"; string s_unterordner; s_unterordner = s[1] + s[2] + s[3]; cout << s_unterordner.length(); //MultiByteToWideChar(CP_THREAD_ACP, MB_COMPOSITE, s_unterordner, ... ); LPCTSTR unterordner; unterordner = s_unterordner.c_str(); if(connection_pointer->SetCurrentDirectory(unterordner)) erhalte ich error C2440: '=' : cannot convert from 'const char *' to 'LPCTSTR' Dann benötige ich wohl const wchar_t*? Aber MultiByteToWideChar wandelt doch in LPWSTR um? SétCurrentDirectory benötigt doch LPCTSTR? Oder meintest du dass ich mit MultiByteToWideChar erst in LPWSTR und dann mit c_str() in LPCTSTR umwandel?:confused:
12. Februar 200916 j Dann benötige ich wohl const wchar_t*?Mit deinen aktuellen Projekteinstellungen, ja. Ich sagte es doch schon: Welcher Typ sich hinter TCHAR/LPTSTR/LPCTSTR verbirgt, hängt von deinen Projekteinstellungen ab. Aber MultiByteToWideChar wandelt doch in LPWSTR um? SétCurrentDirectory benötigt doch LPCTSTR?Es gibt eigentlich gar keine Methode SetCurrentDirectory. Es gibt SetCurrentDirectoryA und SetCurrentDirectoryW. SetCurrentDirectory ist nur ein Präprozessorsymbol, das entweder auf die eine oder auf die andere Variante verweist. Und das ist von denselben Projekteinstellungen abhängig, die regeln, was TCHAR ist. Das gilt übrigens für fast alle WinAPI- und MFC-Funktionen, die mit Strings arbeiten. Wenn man durchgängig die T-Varianten benutzt, kann man die Projekteinstellungen zwischen Multibyte und Unicode umschalten, und es lässt sich trotzdem noch immer alles kompilieren. Wenn du das nicht brauchst, solltest du dich vielleicht auf eines von beiden festlegen. Brauchst du Unicode?
12. Februar 200916 j Brauchst du Unicode? Nei eigentlich nicht. Ist es einfacher für mich, wenn ich ANSI benutze? Wo kann ich denn die Projekteinstellungen auf ANSI umstellen? Bin jetzt im PropertyManager->Configuration Properties und dann einfach überall wo Unicode YES vorkommt auf Unicode NO ändern?
12. Februar 200916 j Ist es einfacher für mich, wenn ich ANSI benutze?Vermutlich. Wo kann ich denn die Projekteinstellungen auf ANSI umstellen? Bin jetzt im PropertyManager->Configuration Properties und dann einfach überall wo Unicode YES vorkommt auf Unicode NO ändern?Unter General > Character Set auf "Use Multi-Byte Character Set" stellen.
12. Februar 200916 j Habe jetzt auf ANSI umgestellt.Funktioniert!:uli Musste erst mal alle wchar_t umstellen.
12. Februar 200916 j LPCTSTR ist je nach Projekteinstellungen, const char* oder const wchar_t*. Im ersten Fall kannst du einfach unterordner.c_str() benutzen, im zweiten Fall musst du den String umwandeln (MultiByteToWideChar) oder wstring benutzen. hmm, für sowas gibts doch Makros - zumindest bei ATL/MFC. CT2CA string str(CT2CA(_T("..."))); :beagolisc
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.