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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2010, 19:57   #21
A_Ton
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 22
По умолчанию

>(Выругался трёхэтажным матом) КАКОЙ ошибкой?
External Exception C0000017, эт при прогоне проги в среде Д7.

Последний раз редактировалось A_Ton; 18.08.2010 в 20:07.
A_Ton вне форума Ответить с цитированием
Старый 18.08.2010, 20:28   #22
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Ну вот. C0000017 - это Out of memory.

С этой информацией с хорошей вероятностью можно предположить, что проблема в вашей RdKadr.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 18.08.2010, 20:29   #23
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

На всякий случай уточню: вы в курсе, что такое адресное пространство процесса и чему оно равно для 32-х разрядного процесса?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 18.08.2010, 20:49   #24
A_Ton
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 22
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Ну вот. C0000017 - это Out of memory.

С этой информацией с хорошей вероятностью можно предположить, что проблема в вашей RdKadr.
В этом что-то есть. Если я имитирую копирование фрагмента копированием только 1 фрейма из области до 2Гб то файл наполняется нормально. Но если этот опыт повторить для такого же 1 фрейма из области за 2Гб то через некоторое время вылетаю.
Процедура RdKadr от профи, при чтении пашет без проблем... Буфер содержит не только запись?
Вот код ReadKadr:
----------------------
function FileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64;
begin
{$R-} Result := Offset;
Int64Rec(Result).Lo := SetFilePointer(THandle(Handle), Int64Rec(Result).Lo,
@Int64Rec(Result).Hi, Origin); {$R+} end;
----------------------
procedure RdKadr(Pos: Integer);
begin
try DatErr:=False;
FileSeek(Hd,Int64(Pos) * Int64(SizeOf(TRecInFile)),0);
FileRead(Hd,RecFile,SizeOf(TRecInFi le));
except DatErr:=True; { ShowMessage('Ошибка чтения файла видео!'); } end; end;

Последний раз редактировалось A_Ton; 18.08.2010 в 22:02.
A_Ton вне форума Ответить с цитированием
Старый 18.08.2010, 21:03   #25
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

В вашем коде, в вызовах CreateFile, WriteFile, CloseHandle нет ничего, что могло бы приводить к такой ошибке. Вывод? Проблема в коде, который вы не показали: RdKadr.

Цитата:
Процедура RdKadr от профи
Какое это имеет значение? Он мог действовать в иных предположениях, нежели вы.

Цитата:
Вот код ReadKadr:
Я не вижу здесь никакой ReadKadr. Я вижу здесь куски несвязного кода.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 18.08.2010 в 21:07.
GunSmoker вне форума Ответить с цитированием
Старый 18.08.2010, 21:13   #26
A_Ton
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 22
По умолчанию

>Он мог действовать в иных предположениях,
Нет, из его примера чтения файлов.
>Я вижу здесь куски несвязного кода.
Не горячитесь. ReadKadr использует функцию позиционирования и я её привёл вверху.
Позиционирование/чтение из ReadKadr под функцией. Остальные детали только затруднят.
Pos - то самое i в вызове ReadKadr(i);

Последний раз редактировалось A_Ton; 18.08.2010 в 21:15.
A_Ton вне форума Ответить с цитированием
Старый 18.08.2010, 22:12   #27
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Если из приведённых кусков ничего не добавляя (кроме переменных и пары строк на открытие/закрытие файла...) слепить всё это дело, то это дело нормально работает - проверил на файле 2,7 ГБ. Так что проверяем по F8 на какую строчку ругается, либо нормальный код показываем.
eoln вне форума Ответить с цитированием
Старый 18.08.2010, 22:40   #28
A_Ton
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 22
По умолчанию

>либо нормальный код показываем
Код показан. Нечего добавить. Вы проверяли с каким размером записи? Может в этом дело?
Есть еще подозрение, что проблема возникает при переходе через 2Гб рубеж. Т.е если выбранный фрагмент этот рубеж не включает то всё нормально.

>F8
Не реально.
A_Ton вне форума Ответить с цитированием
Старый 18.08.2010, 23:03   #29
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от A_Ton Посмотреть сообщение
Остальные детали только затруднят.
Проблема сидит в остальных деталях. Вы ещё не поняли? С хорошей долей вероятности, проблема у вас вовсе не в файле, а в выделении памяти. Файл вообще не причём.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 18.08.2010, 23:07   #30
A_Ton
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 22
По умолчанию

>Есть еще подозрение, что проблема возникает при переходе через 2Гб рубеж. Т.е если выбранный фрагмент этот рубеж не включает то всё нормально.
Проверил это предположение. Действительно если я оставляю только фрагмент находящийся ЗА(ДО) ПРЕДЕЛАМИ 2Гб то всё НОРМАЛЬНО. у меня это примерно после(ДО) 2100 записей. В случае если граница попадает в область копирования - вылетаю...
Поясняю.
1. Удаляю область включающую границу, т.е. копирую то что за пределами 2Гб - норма.
2. Удаляю область включающую границу, но копирую то что до 2ГБ - пишет в файл, но завершается с ошибкой.
3. Удаляю область НЕ включающую границу, т.е. копирую то что до и за пределами 2Гб - создается файл 0 размера и вылетаю.
И чего теперь делать?

Последний раз редактировалось A_Ton; 18.08.2010 в 23:22.
A_Ton вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование/Удаление подкаталогов Xanex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 16.05.2010 20:40
Удаление и копирование формы krikaved Общие вопросы Delphi 1 25.03.2010 12:56
Удаление фрагмента текста Шурик Общие вопросы Delphi 0 31.05.2009 16:11
Как востановить фотографии с флешки в 2ГБ miniSD Easyman Компьютерное железо 2 30.07.2008 13:45
Чтение фрагмента файла в динамический массив. ZeroCool. Общие вопросы Delphi 2 02.11.2007 08:14