|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 15, 2004 19:32:02 Здравствуйте все. Народ, подскажите, пожалуйста, какой-либо механизм получения информации о произошедшей ошибке. Ситуация такова: .data ? hFile dd ? nSize dd ? ArrPtr dd ? . . LOCAL RetBuffer :DWORD . . invoke CreateFile, fname, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0 invoke GetFileSize,hFile, 0 invoke ReadFile, hFile, ArrPtr, nSize, RetBuffer, 0 В hFile, nSize, ArrPtr полученные данные, считанный размер файла совпадает с действительным, отсюда вывод, что hFile получен верно, ArrPtr - указатель на зарезервированный кусок памяти под чтение данных из файла(в размере nSize байт), RetBuffer - указатель на буфер возврата количества считанных данных. Программа уходит в ReadFile и застревает там. Никаких сообщений об ошибках, типа MessageBox'ов от системы, вообще ничего. Тихо-мирно процесс прекращает своё существование. GetLastError или PrintError соответственно не помагают. Можно ли в таком случае как-то получить информацию о том, что там в ReadFile произошло? Буду благодарен за любую подсказку. |
|
|
Дата: Июн 15, 2004 19:49:17 Попробуй отладить приложение в дебагере. |
|
|
Дата: Июн 15, 2004 20:18:30 А виндовский Debeg.exe поможет? |
|
|
Дата: Июн 15, 2004 20:20:20 Поможет дебаггер от VS, или WinDBG, или OllyDBG. Видишь, какой выбор! |
|
|
Дата: Июн 15, 2004 21:40:21 · Поправил: PavPS А может стоит хорошо подумать, где значение, а где ссылка ReadFile (hFile, offset ArrPtr, nSize, addr RetBuffer, 0); Ведь такие симптомы указывают на то, что обращение к запрещенной/несущ-й области памяти. -> ошибка может быть в этом. |
|
|
Дата: Июн 15, 2004 21:50:31 А может стоит хорошо подумать, где значение, а где ссылка :))) |
|
|
Дата: Июн 15, 2004 22:56:37 volodya, PavPS: спасибо. Чтобы "хорошо подумать, где значение, а где ссылка", надо хотя бы иметь минимум того, ЧТО обдумывать, а с этим пока тяжко. Закачал masm неделю назад, и в каком-то из хелпов прочел: для работы необходим минимум базовых знаний. Увы :((( пока не имею... Потому такие наивные вопросы :) А если совсем хорошо подумать то придумал так: invoke ReadFile, hFile, offset ArrPtr, ADDR nSize, ADDR RetBuffer, 0 Без ADDR в третьем параметре наезжаем на переменную fname, и в MessageBox (последующем) вместо имени файла видим его содержание, например текст всего oleaut32.inc. Ещё раз спасибо. |
|
|
Дата: Июн 15, 2004 23:25:21 BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped ); DWORD nNumberOfBytesToRead т.е. никакого ADDR nSize, а чисто nSize. А уж если куда наезжаешь, то проверь как жиреет твой буфер и на чё ОН наезжает. Хотя не стоит это дальше... А вообще обзаведись MSDN. 3/4 вопросов отпадет! |
|
|
Дата: Июн 16, 2004 07:47:45 Можно получить код ошибки, перевести его в текст и показать пользователю. Для получения кода - GetLastError. Для текста - FormatMessage |
|
|
Дата: Июн 16, 2004 15:13:18 Разобрался: буфер жирел как надо, вот только не там где надо, а в секции .data? |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057 |