Вверх ↑
Разработчик
Ответов: 26170
Рейтинг: 2127
#1: 2011-06-28 15:50:41 ЛС | профиль | цитата
1nd1g0 писал(а):
Физически история проблемы такая же - менеджер памяти обращается к области памяти за пределами допустимого адресного пространства и благополучно улетает

А если проверить на другой схеме, которую я перезалил, то там происходит выброс.

P.S. Гы. А если попробовать переменную pBuffer сделать глобальной, а не выделять ей память при каждом обращении к оверлэпиду, интересно, где тогда вылетит
------------ Дoбавленo в 15.32:
1nd1g0 писал(а):
Некоторые - действительно попадают в доступный ему сегмент данных и ошибки не происходит, туда попадают нужные данные и всё работает. Некоторые попадают в сегменты, доступные, но защищённые - происходит исключение по ошибке №204 самого паскаля

А какого черта система сама по себе производит реалокэйт памяти куда попало, а не в досутпную область, это что, намек на то, что метод перекрытия глючный у ReadFile Совсем не радует
------------ Дoбавленo в 15.42:
Посмотрел более детально, у ReadFile нет метода перекрытия, к методу запуска цепляется новый поток с асинхронным методом Read, а в нем читаются Pipe от консольнго приложения. А сам ReadFile не имеет перекрытого метода. Похоже, что сам поток глючит с выделенной памтью
------------ Дoбавленo в 15.50:
Короче, надо pBuffer сделать глобальной для всего класса и посмотреть

К примеру, так



type
THIWinExec = class(TDebug)
private
pBuffer: string;
hProcess: THandle;
hPipeInputWrite: THandle;
...

А из метода Read не забыть убрать или поставить ремарку
карма: 22

0