Как я выяснил, два символа NULL, хранящиеся в конце строки, были проблемой.Очевидно, std :: wstring не заботится о NULL, как это делает старая добрая строка C.Если он считает, что длина строки составляет 10 символов, ему все равно, являются ли некоторые из этих 10 символов значениями NULL.Если вы затем добавите к этой строке, дополнительные символы будут добавлены после 10-го символа.Если последними символами строки являются NULL, вы получите:
C:\\SomePath\0\0\\*.*
Такая строка не может быть использована в любом месте.
Как я получил символы NULL в конце оригинальной строки?Я использовал wstring.resize () в другой функции, которая дополняет строку значениями NULL.Я сделал это для того, чтобы передать & string [0] в функцию Windows API, ожидающую LPWSTR.
Теперь, когда я знаю, что это не работает, я вместо этого использую настоящий LPWSTR.Это немного более неуклюже, но это работает.Исходя из MFC, я подумал, что мог бы использовать std :: wstring как CString с его методами GetBuffer и Release.