В прошлом я допустил ошибку в коде CString, из-за которой CString перестала работать корректно при передаче в качестве параметров. Ваша проблема может быть совершенно другой, но я объясню здесь, что я сделал, чтобы вызвать проблему, поскольку она может кому-то помочь.
Моя CString содержала имя каталога. Чтобы немного его очистить, я проверил, был ли последний символ '\', и если это так, я заменил его на '\ 0', напрямую перезаписав символ внутри строки CString.
Это, вероятно, каким-то образом разрушило целостность CString, создав несоответствие между длиной строки, измеряемой такими вещами, как strlen (), и фактическим размером буфера. Мое объяснение проблемы может быть неверным, но, по-моему, оно сводится к тому, что я подрываю целостность CString.
Я исправил свою проблему, заменив свое утверждение чем-то вроде
имя_директории = dirname.Left (dirname.GetLength () - 1);
Я пишу это по памяти и не часто использую функции, так что извините, если я вспомнил неправильное имя функции. В любом случае, я рекомендую не записывать нулевые символы в середину строки CString, чтобы сократить ее, и искать это (среди прочего), если возникает проблема с CStrings в качестве параметров.
Ах, да, я думаю, что проблема может быть вашей. Если вы укорачиваете строку, перезаписывая символ, то, возможно, GetLength () вернет старое значение, которое больше, чем вы могли ожидать.
Моя настоящая проблема заключалась в том, что dir + "\" + имя файла не работало. Я предполагаю, что это конкатенация строк, содержащих нуль, и что окончательное значение было просто частью каталога, поскольку именно там был добавлен ноль.