Получение External Exception C0000006 в приложении D2006 - как я могу заставить Delphi загрузить весь исполняемый файл? - PullRequest
2 голосов
/ 02 августа 2011

Иногда я получаю это при выходе из моего приложения - мое приложение запускает EXE по сети. Я понимаю, что это ошибка страницы, когда часть EXE загружается по требованию.

Я также наблюдал это в методе OnDrawCell TDrawGrid, поэтому я не уверен, как это могло вызвать загрузку страницы. Кроме того, исключение продолжало происходить.

Итак, мои вопросы:

Может ли ошибка C0000006 возникнуть по другим причинам? Я сделал довольно серьезные изменения в том, как приложение управляет памятью, хотя ничего необычного, и я уверен, что код ведет себя.

Как вы можете заставить приложение загружать все себя в память при запуске (в Delphi 2006 - я так понимаю, есть директивы для более поздних версий Delphi).

1011 * ТИА *

Ответы [ 3 ]

4 голосов
/ 02 августа 2011

Директива $SetPEFlags, кажется, является частью Delphi 2006, по крайней мере, Холвард говорит об этом в этой статье в контексте D2006. Посмотрите здесь о том, как его использовать.

2 голосов
/ 02 августа 2011

Мы тоже это переживаем.Система помещает некоторые исполняемые страницы в обмен, а затем не может их вернуть на некоторое время спустя.Похоже, это связано с восстановлением сетевых соединений после сна.

Единственное жизнеспособное решение, которое мы нашли, - это найти исполняемые файлы на локальном компьютере.

1 голос
/ 28 января 2016

Это исключение C0000006 также часто возникает, если ваше программное обеспечение запускается с сетевого диска. Чтобы предотвратить эту проблему, вы можете объединить флаг

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}

со следующим флагом:

IMAGE_FILE_NET_RUN_FROM_SWAP = $0800;

{$SetPEFlags $0C00}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...