Je suis utiliser le type de chaînes suivant: LPCSTR, TCHAR, String je veux convertir:LPCSTR, TCHAR, String
- de TCHAR à LPCSTR
- de chaîne char
je convertir de TCHAR à LPCSTR par ce code:
RunPath = TEXT("C:\\1");
LPCSTR Path = (LPCSTR)RunPath;
de chaîne en char i convertir par ce code:
SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog;
saveFileDialog1->Title = "Сохранение файла-настроек";
saveFileDialog1->Filter = "bck files (*.bck)|*.bck";
saveFileDialog1->RestoreDirectory = true;
pin_ptr<const wchar_t> wch = TEXT("");
if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) {
wch = PtrToStringChars(saveFileDialog1->FileName);
} else return;
ofstream os(wch, ios::binary);
Mon problème est que quand je mets « Propriétés de configuration -> Général caractères dans « Utiliser multi-octets de caractères » la première partie du code de travail correctement. Mais la deuxième partie du code renvoie l'erreur C2440. Lorsque je définis "Propriétés de configuration -> Général Jeu de caractères dans" Utiliser Unicode ", la deuxième partie du code fonctionne correctement, mais la première partie du code renvoie le seul premier caractère de TCHAR à LPCSTR
Si UNICODE est activé dans votre build, la plupart des API Windows sont '# define'-ed pour leurs versions à caractères larges. Les types T (par exemple 'TCHAR',' LPCTSTR', etc.) sont mappés à 'wchar_t' et' const wchar_t * 'quand UNICODE est défini. Sinon, ils sont mappés sur 'char' et' const char * '. Si vous êtes en train de programmer en UNICODE, alors vous pouvez juste utiliser des choses comme 'WCHAR' et' LPCWSTR', en évitant les types-T. –