RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> Дано: > File[NumFile].Name=<имя двоичного файла размер которого равен 6101 байтов> > File[NumFile].Adres=смещение в байтах от начала массива ImageRom куда загружаем упомянутый файл > > Программа(почти вся): > > typedef unsigned char BYTE; > typedef unsigned long DWORD; > #define SIZE_ROM_FILE (128*1024) > #define MAX_BIN_FILE 3 > > BYTE ImageRom[SIZE_ROM_FILE]; > > typedef struct { > char Name[280]; > DWORD Adres; > } FILEDATA; > > FILEDATA File[MAX_BIN_FILE]; > > > // первый способ > void LoadBin(BYTE NumFile) > { > FILE * hFile; > DWORD CurSize; > > if ((hFile=fopen(File[NumFile].Name,"rb")) == NULL) > { > ErrExit("Невозможно открыть входной файл %s",File[NumFile].Name); > }; > CurSize = fread(ImageRom+File[NumFile].Adres,1,SIZE_ROM_FILE,hFile); > fclose(hFile); > printf("Адрес '%x'\n",ImageRom+File[NumFile].Adres); > printf("Длина входного файла '%d'\n",CurSize); > if (CurSize == 0) > { > ErrExit("Длина входного файла не правильная %ud",CurSize); > }; > }; > > // второй способ > void LoadBin(BYTE NumFile) > { > FILE * hFile; > DWORD CurSize; > > if ((hFile=fopen(File[NumFile].Name,"rb")) == NULL) > { > ErrExit("Невозможно открыть входной файл %s",File[NumFile].Name); > }; > CurSize = fread(ImageRom+File[NumFile].Adres,1,6101,hFile); > fclose(hFile); > printf("Адрес '%x'\n",ImageRom+File[NumFile].Adres); > printf("Длина входного файла '%d'\n",CurSize); > if (CurSize == 0) > { > ErrExit("Длина входного файла не правильная %ud",CurSize); > }; > }; > > Компилим для работы под NT > > Первый вариант: > Под виндами 95, 98, NT4sp5 > Дык вот в зависимости от значения смещения (File[NumFile].Adres) получаем либо > правильное значение загруженного файла либо нулевую длину. > (хотим считать 128КБ, а файл длинной 6101) > > Второй вариант: > Под виндами 95 > Когда явно указываем сколько хотим считать те 6101, то при любом значении смещения > все ОК. > > НО если запускать этот же test.exe в ODIN через "PE test.exe" под OS/2 ТО ОБА варианта работаю правильно. > И если компилить чисто под OS/2 то так же ОБА варианта работаю правильно. > > Вопрос: где грабли ? > Доп вопрос: Как узнать длину файла ? ( используя стандартную библиотеку Watcom). > > Справка: > функция fread() пытается считать заданное число байтов и возвращает реальное > значение считанных байтов. > PS: могу мылом выслать исходник и test.exe
_, _, _,
/ \ (_ / ~ )
\ / , ) / /
~ ~ ~~~
Programmed by
Dmitri Maximovich
,
Dmitry I. Platonoff
,
Eugen Kuleshov
.
25.09.99 (c) 1999,
RU/2
. All rights reserved.
Rewritten by
Dmitry Ban
. All rights ignored.