Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Исключения в WinAPI / 7 сообщений из 7, страница 1 из 1
15.06.2020, 15:52
    #39969412
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключения в WinAPI
А можно ли бросать исключения из коллбеков WinApi-шных функций? В частности интересует функция EnumResourceNames.

Т.е. корректно ли писать так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
function EnumFunc(hModule: HMODULE; lpszType, lpszName: PChar; lParam: LONG_PTR): BOOL; stdcall;
begin
   ........
  if ...... then
    raise EMyException.Create(....)
  ........
  Result := True;
end;

begin
  try
    Win32Check(EnumResourceNames(HInstance, 'RCDATA', EnumFunc, 0));
  except
    on E: EMyException do
      DeExcept(E);
  end;
end;


С уважением, Vasilisk
...
Рейтинг: 0 / 0
15.06.2020, 16:02
    #39969418
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключения в WinAPI
Вопрос интересный. ЕМНИП, апишки виндовые не используют механизмы SEH. Только возврат кода ошибки. Теоретически делать так можно. При исключении управление перейдет в любом случае в твой обработчик. А вот практически....х его з, что там под капотом может быть. Глобальные ресурсы утекут, например.
...
Рейтинг: 0 / 0
15.06.2020, 16:05
    #39969419
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключения в WinAPI
_Vasilisk_А можно ли бросать исключения из коллбеков WinApi-шных функций?

Можно, разрешаю. Но лучше всё-таки использовать специально для этого предназначенный результат callback функции.
...
Рейтинг: 0 / 0
15.06.2020, 16:06
    #39969423
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключения в WinAPI
_Vasilisk_,

тут не рекомендуют, там правда ссылка не рабочая уже, но вроде https://web.archive.org/web/20120917055617/ https://blogs.msdn.com/b/oldnewthing/archive/2012/09/10/10347674.aspx%5D%D1%82%D1%83%D1%82]https://blogs.msdn.com/b/oldnewthing/archive/2012/09/10/10347674.aspx]тут осталась
...
Рейтинг: 0 / 0
15.06.2020, 16:41
    #39969450
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключения в WinAPI
Dimitry Sibiryakov
Но лучше всё-таки использовать специально для этого предназначенный результат callback функции.
Это какой? FALSE, чтобы прервать перебор? А мне бы еще вернуть текст ошибки.

Мне нужно проверить "валидность" каждого ресурса. Т.е. я могу делать либо так, как написал, либо собрать все имена в TStringList, передать его через LPARAM, а уже на выходе проверить.
...
Рейтинг: 0 / 0
15.06.2020, 16:49
    #39969454
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключения в WinAPI
Zelius
тут не рекомендуют,
Спасибо. Значит нет
...
Рейтинг: 0 / 0
15.06.2020, 17:20
    #39969467
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключения в WinAPI
_Vasilisk_А мне бы еще вернуть текст ошибки.

Для этого можно использовать от самый "lParam: LONG_PTR", передав в функцию указатель на
какую-нибудь переменную куда она этот код и должна запихать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Исключения в WinAPI / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]