Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2010, 09:37   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если не ошибаюсь то там через var механизм идет указатель(указываем имя переменки, но берется указатель...короче передача по ссылке по сути)
но стоит проверить, Делфи нет под рукой, так что скинь прототип Делфийский от ReadFile

кстати, проверь банально где ошибка то:
Код:
function ReadSector(hD: THandle; Sector: DWORD; var Buffer: TSector): boolean;
var
BytesRead,PosLo, PosHi: DWORD;
begin
Result := false;
PosLo := 0;
PosHi := PosLo;
PosLo := _mul(Sector,BytesPerSector,PosHi);
SetLastError(0);//для чистоты эксперимента
SetFilePointer(hD,PosLo,@PosHi,FILE_BEGIN);
ShowMessage(IntToStr(GetLastError()));
SetLastError(0);//для чистоты эксперимента
Result:=ReadFile(hD, Buffer[0], BytesPerSector, BytesRead, nil);//помоему так лучше.
ShowMessage(IntToStr(GetLastError()));
end;
будет видно где сбой.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.04.2010, 09:47   #12
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Цитата:
есть у меня мысль как сделать...
Давайте предлагайте... Может переделать _mul для работы со знаковыми числами?
Goodwin98, цитата про SetFilePointer...
Hottabych вне форума Ответить с цитированием
Старый 23.04.2010, 09:52   #13
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Ошибка в readfile
Код:
function ReadFile(hFile: THandle; var Buffer; nNumberOfBytesToRead: DWORD;
  var lpNumberOfBytesRead: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;

function SetFilePointer(hFile: THandle; lDistanceToMove: Longint;
  lpDistanceToMoveHigh: Pointer; dwMoveMethod: DWORD): DWORD; stdcall;
Реально знак виноват... DWORD - беззнаковое (операции идут с этим типом), а Longint-знаковое число, (тут был бред )) Ну, какие мысли?

Добавлено:
Вот что получается в PosLo: 1010011010110000100100000000000, а должен быть наверно 0?

Последний раз редактировалось Hottabych; 23.04.2010 в 10:25.
Hottabych вне форума Ответить с цитированием
Старый 23.04.2010, 15:53   #14
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Все, проблема решена, дело было не в неверности указателя SetFilePointer, а в передачи параметров функции ReadFile
Hottabych вне форума Ответить с цитированием
Старый 23.04.2010, 15:58   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Вот что получается в PosLo: 1010011010110000100100000000000, а должен быть наверно 0?
вообще то надо было верхний смотреть

рад что вы разобрались.
советую присмотреть способ которым мы выяснили где именно ошибка
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.04.2010, 16:19   #16
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Сейчас наверное глупый вопрос такой спрошу.
А что за требование такое, чтобы указатель был кратен 512 ?
Почему 512 ?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 23.04.2010, 16:22   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сектор же 512 байт у нас.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.04.2010, 16:27   #18
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Т.е. установить указатель на середину сектора сразу я не могу?
При чтении из файла, например, это не принципиально.
А если открываю диск, то всё, капец.
MSDN кстати, молчит об этом.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 23.04.2010, 16:32   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

можете, правда прочтется сектор целиком, просто вам выдадут(ОС выдаст) в ваш буфер нужный кусок сектора(или нескольких)
просто ТС нужно читать именно сектор. поэтому так адрес формируем
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 23.04.2010 в 16:36.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.04.2010, 16:45   #20
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

В том то и дело что не могу.
SetFilePointer в таком разе выдаёт ошибку:

Цитата:
Параметр задан неверно.
Если я ошибку игнорирую и всё равно читаю сектор, то читает он первый сектор. т.е. функция SetFilePointer не сработала.
ReadFile тоже читает только сектор целиком, если я захочу прочитать 3 байта с начала сектора - борода.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция SetFilePointer. Как расчитать адрес? как правильно передать смещение в функцию SetFilePointer? Hottabych Общие вопросы Delphi 3 07.05.2013 20:16
Рассчитать выражение annosinceva Фриланс 11 26.03.2010 22:35
(pascal) Рассчитать значение Y tkp_xx Помощь студентам 2 07.12.2009 01:12
рассчитать объем Exo Microsoft Office Excel 9 28.04.2008 15:03
рассчитать число столбцов c_zurab Microsoft Office Excel 2 17.03.2008 10:50