Подскажите, плз.
Как можно интерпретировать результат выполнения ф. SHFileOperation?
Вероятно, если не ноль, то это код ошибки. Как из этого кода получить
сообщение об ошибке?
Здравствуйте, Mith, Вы писали:
M>Подскажите, плз. M>Как можно интерпретировать результат выполнения ф. SHFileOperation? M>Вероятно, если не ноль, то это код ошибки. Как из этого кода получить M>сообщение об ошибке?
А GetLastError() вызывать не пробовали (сразу после возврата нуля)?
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, Mith, Вы писали:
M>>Подскажите, плз. M>>Как можно интерпретировать результат выполнения ф. SHFileOperation? M>>Вероятно, если не ноль, то это код ошибки. Как из этого кода получить M>>сообщение об ошибке?
SDB>А GetLastError() вызывать не пробовали (сразу после возврата нуля)?
GetLastError не реагирует. SHFileOperation сама может что возвращать.
Например, может возвратить 1223. Как по этому числу узнать, что не так?
Здравствуйте, Mith, Вы писали:
M>GetLastError не реагирует. SHFileOperation сама может что возвращать. M>Например, может возвратить 1223. Как по этому числу узнать, что не так?
М-м-м... а пихать возвращаемое значение в FormatMessage() пробовали? Или в тулзу Error Lookup?
Здравствуйте, Mith, Вы писали:
M>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>Здравствуйте, Mith, Вы писали:
M>>>Подскажите, плз. M>>>Как можно интерпретировать результат выполнения ф. SHFileOperation? M>>>Вероятно, если не ноль, то это код ошибки. Как из этого кода получить M>>>сообщение об ошибке?
SDB>>А GetLastError() вызывать не пробовали (сразу после возврата нуля)?
M>GetLastError не реагирует. SHFileOperation сама может что возвращать. M>Например, может возвратить 1223. Как по этому числу узнать, что не так?
Хм... Вообще-то, в МСДН есть пример, в котором нарисовано следующее:
HRESULT hr;
........
hr = SHFileOperation(&sfo);
То есть, возвращается HRESULT. В том же МСДН-е есть пример, как этот самый HRESULT декодировать. Я вот, например, на приведенное Вами значение 1223 получил ERROR_CANCELED.
Стало быть, если действительно возвращается HRESULT, можно попробовать действовать таким вот способом.
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, Mith, Вы писали:
M>>GetLastError не реагирует. SHFileOperation сама может что возвращать. M>>Например, может возвратить 1223. Как по этому числу узнать, что не так?
SDB>М-м-м... а пихать возвращаемое значение в FormatMessage() пробовали? Или в тулзу Error Lookup?
Error Lookup не знает такие ошибки (например 1026). FormatMessage() мне может помочь, но нужно
знать какие парамерты ему передать
Здравствуйте, Mith, Вы писали:
M>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>Здравствуйте, Mith, Вы писали:
M>>>GetLastError не реагирует. SHFileOperation сама может что возвращать. M>>>Например, может возвратить 1223. Как по этому числу узнать, что не так?
SDB>>М-м-м... а пихать возвращаемое значение в FormatMessage() пробовали? Или в тулзу Error Lookup?
M>Error Lookup не знает такие ошибки (например 1026). FormatMessage() мне может помочь, но нужно M>знать какие парамерты ему передать
А вот тут мы подошли к самому интересному
Как показывает практика, ошибка 1026 вылетает вот из-за чего:
The pFrom member is a double NULL-terminated string that contains one or more source file names. These names can be either fully qualified paths or standard DOS wildcards such as *.*. Although this member is declared as a NULL-terminated string, it is used as a buffer to hold multiple file names. Each file name must be terminated by the usual single NULL character. An additional NULL character must be appended to the end of the final name to indicate the end of pFrom.
Почему-то, если не задавать второй 0, вылетает эта ошибка. Что она означает — загадка... Проверьте, может у Вас как раз тот случай.
Здравствуйте, Sergeant, Вы писали:
S>Здравствуйте, Mith, Вы писали:
M>>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>>Здравствуйте, Mith, Вы писали:
M>>>>Подскажите, плз. M>>>>Как можно интерпретировать результат выполнения ф. SHFileOperation? M>>>>Вероятно, если не ноль, то это код ошибки. Как из этого кода получить M>>>>сообщение об ошибке?
SDB>>>А GetLastError() вызывать не пробовали (сразу после возврата нуля)?
M>>GetLastError не реагирует. SHFileOperation сама может что возвращать. M>>Например, может возвратить 1223. Как по этому числу узнать, что не так?
S>Хм... Вообще-то, в МСДН есть пример, в котором нарисовано следующее: S>
S>То есть, возвращается HRESULT. В том же МСДН-е есть пример, как этот самый HRESULT декодировать. Я вот, например, на приведенное Вами значение 1223 получил ERROR_CANCELED. S>Стало быть, если действительно возвращается HRESULT, можно попробовать действовать таким вот способом.
Я видел этот пример! Но, к сожалению, это не то... Ошибка 1223 возникает когда задаешь кривой путь. "Действие отменено", согласись не в тему...
А на ошибку 1026 он вообще не реагирует.
Здравствуйте, Sergeant, Вы писали:
S>А вот тут мы подошли к самому интересному S>Как показывает практика, ошибка 1026 вылетает вот из-за чего:
S>The pFrom member is a double NULL-terminated string that contains one or more source file names. These names can be either fully qualified paths or standard DOS wildcards such as *.*. Although this member is declared as a NULL-terminated string, it is used as a buffer to hold multiple file names. Each file name must be terminated by the usual single NULL character. An additional NULL character must be appended to the end of the final name to indicate the end of pFrom. S>Почему-то, если не задавать второй 0, вылетает эта ошибка. Что она означает — загадка... Проверьте, может у Вас как раз тот случай.
Да, я знаю про эту фишку! В общем это не загадка, а задумка разработчиков. Но задача стоит именно получить сообщение об ошибке и выдать её пользователю, потому как он может указать кривой путь.
Здравствуйте, Sergeant, Вы писали:
S>Здравствуйте, Mith, Вы писали:
M>>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>>Здравствуйте, Mith, Вы писали:
M>>>>GetLastError не реагирует. SHFileOperation сама может что возвращать. M>>>>Например, может возвратить 1223. Как по этому числу узнать, что не так?
SDB>>>М-м-м... а пихать возвращаемое значение в FormatMessage() пробовали? Или в тулзу Error Lookup?
M>>Error Lookup не знает такие ошибки (например 1026). FormatMessage() мне может помочь, но нужно M>>знать какие парамерты ему передать
S>А вот тут мы подошли к самому интересному S>Как показывает практика, ошибка 1026 вылетает вот из-за чего:
S>The pFrom member is a double NULL-terminated string that contains one or more source file names. These names can be either fully qualified paths or standard DOS wildcards such as *.*. Although this member is declared as a NULL-terminated string, it is used as a buffer to hold multiple file names. Each file name must be terminated by the usual single NULL character. An additional NULL character must be appended to the end of the final name to indicate the end of pFrom. S>Почему-то, если не задавать второй 0, вылетает эта ошибка. Что она означает — загадка...
Чего же тут загадочного? В переменную, имеющую формальный тип LPTSTR, может записываться несколько сишных строк, каждая из которых кончается нулем. Как же функция сможет понять, какой из этих нулей является концом последней строки? Вот для этого второй нулевой символ и нужен.
Здравствуйте, SchweinDeBurg, Вы писали:
S>>Почему-то, если не задавать второй 0, вылетает эта ошибка. Что она означает — загадка...
SDB>Чего же тут загадочного? В переменную, имеющую формальный тип LPTSTR, может записываться несколько сишных строк, каждая из которых кончается нулем. Как же функция сможет понять, какой из этих нулей является концом последней строки? Вот для этого второй нулевой символ и нужен.
Я имею в виду, что загадка — это не два нуля в конце строки, это понятно А загадка — это код ошибки 1026 в данном случае. В win32 errror codes ее нет, но в других местах она проскакивает как File System Error, и означает недостаток места на диске. Железная логика.