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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2009, 19:58   #1
Korrado
 
Регистрация: 20.10.2009
Сообщений: 8
По умолчанию Использование динамического массива в функции ReadFile (WinAPI).

Всем привет. При использовании динамического массива в функции WinAPI ReadFile выдает ошибку.

Синтаксис этой функции (на всякий случай - вот ссылка):

BOOL ReadFile(
HANDLE hFile, // дескриптор файла
LPVOID lpBuffer, // буфер данных
DWORD nNumberOfBytesToRead, // число байтов для чтения
LPDWORD lpNumberOfBytesRead, // число прочитанных байтов
LPOVERLAPPED lpOverlapped // асинхронный буфер
);

Код программы:

Код:
  var
    namef : PAnsiChar;                                                          
    buf : array of byte;                                                        // Буфер
    result : LongBool;                                                          
    resultb : dword;                                                            
    bpb : record                                                                
      sect_siz : word;                                                          
      clustsiz : byte;                                                          
      res_sect : word;                                                          
      fat_cnt  : byte;                                                          
      tot_sect : LongWord;                                                      
      media    : byte;                                                          
      fat_size : LongWord;                                                      
      clust_cc : LongWord;                                                      
    end;
  begin
    SetLength(buf, 512);
    FillChar(buf,sizeof(buf),0);
    namef := PChar('\\.\' + DriveComboBox.Drive + ':');
    hfile := CreateFile(namef,
                        GENERIC_READ,
                        FILE_SHARE_READ or FILE_SHARE_WRITE,
                        nil,
                        OPEN_EXISTING,
                        0,
                        0);
    if hfile = INVALID_HANDLE_VALUE then
      begin
        ShowMessage(Oschibka!');
        Close;
      end;
    SetFilePointer(hfile,
                   0,
                   nil,
                   FILE_BEGIN);
    result := ReadFile(hfile,
                       buf,
                       sizeof(buf),
                       resultb,
                       nil);
    if result = false then
      begin
        ShowMessage('Oschibka!');
        Close;
      end;
    bpb.sect_siz := StrToInt('$' + IntToHex(buf[12], 2) + IntToHex(buf[11], 2));
    // На этом месте вылетает с ошибкой
Помогите пожалуйста. В чем проблема?
Korrado вне форума Ответить с цитированием
Старый 28.11.2009, 20:04   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
'$' + IntToHex(buf[12], 2) + IntToHex(buf[11], 2))
Уверены, что это значение даст адекватное 16-ричное число? Попробуйте вывести его куда-нибудь перед переводом в Int.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 28.11.2009, 21:19   #3
Korrado
 
Регистрация: 20.10.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Уверены, что это значение даст адекватное 16-ричное число? Попробуйте вывести его куда-нибудь перед переводом в Int.
Да, в этом я абсолютно уверен.

В общем, я сейчас поэксперементировал. Ошибку вызывает даже присваивание какого либо значения массиву buf.

Код:
buf[1] := 1;
Вызывает ошибку



Что же я делаю нитак? Может ошибка в определении динамического массива, или в чем? Ппц((((
Korrado вне форума Ответить с цитированием
Старый 28.11.2009, 21:22   #4
Korrado
 
Регистрация: 20.10.2009
Сообщений: 8
По умолчанию Использование динамического массива в функции ReadFile (WinAPI).

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Уверены, что это значение даст адекватное 16-ричное число? Попробуйте вывести его куда-нибудь перед переводом в Int.
Да, в этом я абсолютно уверен.

В общем, я сейчас посмотрел - даже простое присваивание любому элементу массива какого либо значения уже вызывает ошибку.

buf[1] := 1;

вызывает



Значит я что то неправильно сделал с динамическим массивом? Определил вроде бы верно. Выделил память... все вроде бы норм.
Korrado вне форума Ответить с цитированием
Старый 29.11.2009, 13:34   #5
Korrado
 
Регистрация: 20.10.2009
Сообщений: 8
По умолчанию

да, в этом я уверен.

я посмотрел - даже обычная операция buf[i] := j, вызывает ошибку. значит проблема в самом динамическом массиве. что то нитак в объявлении динамического массива. или в выделении памяти... в общем - помогите((((( в чем жеж проблема то?
Korrado вне форума Ответить с цитированием
Старый 29.11.2009, 13:36   #6
Korrado
 
Регистрация: 20.10.2009
Сообщений: 8
По умолчанию

вот сама ошибка:

Korrado вне форума Ответить с цитированием
Старый 29.11.2009, 13:38   #7
Korrado
 
Регистрация: 20.10.2009
Сообщений: 8
По умолчанию

ппц, вчера отправил 2 сообщения, сегодня еще одна. картинки в сообщения добавлять нельзя? пишет - сообщение будет опубликованно, когда его проверит модератор. и никто ничо не проверяет((

вот ссылка на сообщение. надеюсь не забракуют.

http://s60.radikal.ru/i167/0911/c3/7406400038ca.jpg
Korrado вне форума Ответить с цитированием
Старый 29.11.2009, 13:38   #8
Korrado
 
Регистрация: 20.10.2009
Сообщений: 8
По умолчанию

ппц, вчера отправил 2 сообщения, сегодня еще 2. картинки в сообщения добавлять нельзя? пишет - сообщение будет опубликованно, когда его проверит модератор. и никто ничо не проверяет((

как вставить ссылку на картинку, чтобы не забраковали?
Korrado вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
очистка динамического массива BattleMage Общие вопросы C/C++ 1 19.09.2009 09:03
Создание Динамического массива используя функции и файлы (С++)(HELP) Myau Thai Помощь студентам 2 24.05.2009 18:08
Сохранение динамического массива Horus92 Помощь студентам 3 07.05.2009 12:36
Удаление динамического массива Сергей089 Общие вопросы C/C++ 3 08.03.2009 13:13