на выходе из DoModal, при выделении нескольких файлов первые 3 символа получаются битыми. первый — какое-то случайное значение, а два остальных — нули.
заходил внутрь думодала — память испорченна уже на выходе из GetOpenFileName
проявляется когда файлов 4 и больше
имена простые, VOICE_xxxx
CFileDialog odlg(TRUE, _T(""), _T(""), OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, m_fcomp.getTestOpenFileMask());
CString fileNames;
const int c_cMaxFiles = 100;
vector<TCHAR> buff;
buff.resize((c_cMaxFiles * (MAX_PATH + 1)) + 1, 0);
odlg.m_ofn.lpstrFile = &buff[0];
odlg.m_ofn.nMaxFile = c_cMaxFiles;
if (odlg.DoModal() != IDOK)
return false;
CString dir(odlg.m_ofn.lpstrFile);
А>на выходе из DoModal, при выделении нескольких файлов первые 3 символа получаются битыми. первый — какое-то случайное значение, а два остальных — нули.
Такое впечатление, что проблема с кодировкой, т.е. например, каким-то хреном у тебя вызывается ANSI-версия функции GetOpenFileName(), но при этом буфер после её вызова интерпретируется как Unicode. Короче, проверь настройки Unicode в проекте и вообще копни в эту сторону. Чтобы проверить это, я бы переписал этот кусок кода с явным использованием Unicode, т.е. с вызовом GetOpenFileNameW(), буфером типа LPWSTR и выводом содержимого этого буфера куда-нибудь вроде MessageBoxW(), — короче, безо всяких там TCHAR. Кстати, а зачем вообще все эти манипуляции с буфером? Там же есть метод
GetNextPathName(), с помощью него можно перечислить имена всех выделенных файлов. К тому же, я не уверен, но в классе CFileDialog наверняка есть своя какая-нибудь система управления буфером, а ты мешаешь ей, лазая в .m_ofn напрямую.
x64>Такое впечатление, что проблема с кодировкой, т.е. например, каким-то хреном у тебя вызывается ANSI-версия функции GetOpenFileName(), но при этом буфер после её вызова интерпретируется как Unicode. Короче, проверь настройки Unicode в проекте и вообще копни в эту сторону. Чтобы проверить это, я бы переписал этот кусок кода с явным использованием Unicode, т.е. с вызовом GetOpenFileNameW(), буфером типа LPWSTR и выводом содержимого этого буфера куда-нибудь вроде MessageBoxW(), — короче, безо всяких там TCHAR. Кстати, а зачем вообще все эти манипуляции с буфером? Там же есть метод GetNextPathName(), с помощью него можно перечислить имена всех выделенных файлов. К тому же, я не уверен, но в классе CFileDialog наверняка есть своя какая-нибудь система управления буфером, а ты мешаешь ей, лазая в .m_ofn напрямую.
спасибо, попробую
да это просто кусок был взят из хелпа, а на проблему накнулся случайно, когда в старый код добавил поддержку нескольких файлов