Сбой Dll в Delphi 10.2, но только в режиме отладки


2

Как оказалось, я видел, что отладчик ловил исключение, которое обрабатывалось в dll.

Инструменты -> Параметры -> Параметры отладчика -> Отладчики Embarcadero -> Исходные ОС Исключения -> 32-разрядные ОС Исключения ОС -> Нарушение доступа ($ C0000005) установлено в «Обработать отладчиком»,

В предыдущих версиях Delphi это по умолчанию означало «User Program» (как и все другие Исключения для ОС)

Это выглядело хуже, чем это было, потому что оно происходило в середине цикла, поэтому оно продолжало бросаться непрерывно ... но если бы я просто сказал Delphi игнорировать исключение, это исчезло бы. (Headdesk)


0

Ошибка 5 запрещена.

Это может быть попытка записать в нуль (или где-нибудь в пределах первых 64k данных), или (как вы догадались) она вызывает функцию API Win32, которая не имеет правильных настроек безопасности.

Я полагаю, вы попробовали запустить приложение под учетной записью администратора, чтобы узнать, связано ли это с этим?


0

Проводка в качестве ответа, поэтому код отформатирован правильно.

Итак, из трассировки стека выглядит так, что код перечисляет все окна, чтобы получить текст окна (возможно, заголовок каждого окна?). Это трудно понять, но если вы можете сбросить сборку на 0x0068fbbf, вы увидите, что параметры передаются в GetWindowText. Прототип (ниже) довольно трудно ошибиться.

int WINAPI GetWindowText(_In_ HWND hWnd, _Out_ LPTSTR lpString, _In_ int nMaxCount);

Мое предположение было бы lpStringравно null.

Просто прочитайте документацию на GetWindowText:

Копирует текст строки заголовка указанного окна (если он есть) в буфер. Если указанное окно является элементом управления, текст элемента управления копируется. Однако GetWindowText не может получить текст элемента управления в другом приложении .

Интересно, пытаетесь ли вы перечислить Windows в приложении, это не ваше?

Дельфы, отладка, исключение, Дельфы-10,2-Токио,

delphi,debugging,exception,delphi-10.2-tokyo,

2

Ответов: 3


2

Как оказалось, я видел, что отладчик ловил исключение, которое обрабатывалось в dll.

Инструменты -> Параметры -> Параметры отладчика -> Отладчики Embarcadero -> Исходные ОС Исключения -> 32-разрядные ОС Исключения ОС -> Нарушение доступа ($ C0000005) установлено в «Обработать отладчиком»,

В предыдущих версиях Delphi это по умолчанию означало «User Program» (как и все другие Исключения для ОС)

Это выглядело хуже, чем это было, потому что оно происходило в середине цикла, поэтому оно продолжало бросаться непрерывно ... но если бы я просто сказал Delphi игнорировать исключение, это исчезло бы. (Headdesk)


0

Ошибка 5 запрещена.

Это может быть попытка записать в нуль (или где-нибудь в пределах первых 64k данных), или (как вы догадались) она вызывает функцию API Win32, которая не имеет правильных настроек безопасности.

Я полагаю, вы попробовали запустить приложение под учетной записью администратора, чтобы узнать, связано ли это с этим?


0

Проводка в качестве ответа, поэтому код отформатирован правильно.

Итак, из трассировки стека выглядит так, что код перечисляет все окна, чтобы получить текст окна (возможно, заголовок каждого окна?). Это трудно понять, но если вы можете сбросить сборку на 0x0068fbbf, вы увидите, что параметры передаются в GetWindowText. Прототип (ниже) довольно трудно ошибиться.

int WINAPI GetWindowText(_In_ HWND hWnd, _Out_ LPTSTR lpString, _In_ int nMaxCount);

Мое предположение было бы lpStringравно null.

Просто прочитайте документацию на GetWindowText:

Копирует текст строки заголовка указанного окна (если он есть) в буфер. Если указанное окно является элементом управления, текст элемента управления копируется. Однако GetWindowText не может получить текст элемента управления в другом приложении .

Интересно, пытаетесь ли вы перечислить Windows в приложении, это не ваше?

Дельфы, отладка, исключение, Дельфы-10,2-Токио,
Похожие вопросы