вынес в отдельный пост, хотя тема чем то схожа с "перекодировать в юникод" на этом же форуме
конкретный пример из MSDN, который у меня не компилируется:
WIN32_FIND_DATA FindFileData;
char DirSpec[MAX_PATH];
HANDLE hFile=FindFirstFile(DirSpec, &FindFileData);
не может конвертировать из const char * to LPCWSTR
допустим, я вместо char DirSpec[MAX_PATH]; напишу:
wchar_t DirSpec[MAX_PATH];
тогда, вродебы не выдается ошибка во время компиляции, но если я хочу, чтобы пользователь ввел имя каталога:
cin.get(DirSpec, MAX_PATH);
теперь будет ругаться на cin.get, т.к. не сможет конвертировать в const char *
отсюда два вопроса:
1. как решить проблему, чтобы можно было пользоваться потоковыми классами С++ и функциями Windows
2. почему готовый пример MSDN не работает?
PS: изначально стоит задача, получить список содержимого каталога, пользователь вводит путь.
Здравствуйте, avsokolov, Вы писали:
A>отсюда два вопроса:
A>1. как решить проблему, чтобы можно было пользоваться потоковыми классами С++ и функциями Windows
A>2. почему готовый пример MSDN не работает?
A>PS: изначально стоит задача, получить список содержимого каталога, пользователь вводит путь.
Вам стоит почитать про макросы UNICODE \ _UNICODE и их связь с Win32 API.
вариантов для первого вопроса несколько.
как мне кажется, лучше жестко фиксировать символьный тип, скажем 'wchar_t', и использовать API функции вида ИмяФункции
W, в этом конкретном случае — FindFirstFileW. соответственно, использовать не std::cin\std::cout а std::wcin\std::wcout, std::wstring.
а не работает(вернее не компилируется, так как работы он никакой совершить и не может по этой причине) пример потому, что у Вас макрос FindFirstFile раскрывается в FindFirstFileW, которая первым параметром принимает LPCTSTR(тоесть LPCWSTR в этом случае), а не LPCSTR.
если исправить пример на
WIN32_FIND_DATA FindFileData;
TCHAR DirSpec[MAX_PATH];
HANDLE hFile=FindFirstFile(DirSpec, &FindFileData);
компилироваться должно.