![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
эта прога вообще что делает?
|
![]() |
![]() |
![]() |
#12 |
Брэйнфакер Про
Пользователь
Регистрация: 21.02.2007
Сообщений: 51
|
![]()
Прога переводит графику из формата игры в BMP и обратно. Есть готовая DOS версия (моя), я её просто перевожу под Win интерфейс. И как раз функции распаковки/упаковки были написаны на ассемблере. Лень переписывать эти функции на язык высокого уровня мне. Как это ни странно. =)
Хотя насколько я успел заметить операция типа OutBufPtr^[0]:=$FF; (здесь указатель объявлен как PByteArray) вызывает ту же ошибку. Так что не в ассмблере может и дело... |
![]() |
![]() |
![]() |
#13 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
короче у тебе надо разрешить запись в эту память, проверь нормально ли завершается функция virtualprotect, может она выдаёт ошибку, проверь, вообще существует ли эта область памяти
|
![]() |
![]() |
![]() |
#14 |
Брэйнфакер Про
Пользователь
Регистрация: 21.02.2007
Сообщений: 51
|
![]()
Точно, VirtualProtect выдаёт false и GetLastError выдаёт $57
Пока значение этого кода не нашел. $57 - это просто неверные параметры. =) Изменил OldProtect с pointer на dword - ошибка изменилась. Теперь это 3796 SysErrorMessage показывает пустое окно для этого кода. =) Память эта просто обязана существовать, я же её выделял. При чём по-всякому. Вот здесь нашел значение кода 3796. К Дельфи не имеет никакого отношения, но по смыслу почему-то подходит. http://cenmvst.gov.ab.ca/bookmgr-cgi...ESSAGE.BKSHELF Ну, а если использовать VirtualAlloc, то код ошибки 3720. Уффф... Последний раз редактировалось SteelRat; 27.02.2007 в 22:34. |
![]() |
![]() |
![]() |
#15 |
Брэйнфакер Про
Пользователь
Регистрация: 21.02.2007
Сообщений: 51
|
![]()
Всё, Грузин, спасибо огромное. Я нашел ошибку. Как и ожидалось она нашлась в совсем другом месте. Я сразу хреново сделал, что привёл код лишь в общих чертах. Просто у меня используется команда LOOP для циклов. А счетчик то я задавал в CX по старой привычке, я ещё не работал 32 разрядными регистрами. Естественно, что в ECX было значение хрен знает какое. Буфер переполнялся - Access Violation. Во дурааак я.... =)
PS Оказывается при отладке F8 прокрутит весь цикл LOOP. Раньше такого не было. =) Если бы не это - нашел бы ошибку сразу. Но зато ничего не узнал бы про VirtualProtect. Последний раз редактировалось SteelRat; 27.02.2007 в 23:44. |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запись дисков в Delphi | FaTaL | Общие вопросы Delphi | 16 | 19.04.2011 20:15 |
Буфер и паскаль | Mago | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 29.07.2008 22:19 |
Запись CD/DVD дисков в Delphi | Igoressicus | Общие вопросы Delphi | 10 | 17.07.2008 18:40 |
Запись в файл в Delphi, нужна помощь | s-t-r-i-k-e-r | Помощь студентам | 5 | 03.06.2008 19:11 |
Запись на диск через Delphi | delphin100 | Общие вопросы Delphi | 1 | 09.10.2007 10:10 |