powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / throw крешится после обращения к чужой dll
5 сообщений из 5, страница 1 из 1
throw крешится после обращения к чужой dll
    #39377471
chikanok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Если внешняя библиотека отвечает ошибкой(!=0) приложение приложение должно выбросить исключение,
но на throw студия показывает
VisualStudioUnhandled exception at 0x30303030 in test.exe: 0xC00001A5: Обнаружен недопустимый обработчик исключений (parameters: 0x00000003).
Код:
Код: plaintext
1.
2.
3.
4.
5.
6.
try{
  auto r=ExternalDllFunction();
  if(r!=0) throw std::runtime_error("error description");
}catch(std::runtime_error e){
 ...
}


Если заменить
Код: plaintext
1.
auto r=ExternalDllFunction();


на
Код: plaintext
1.
auto r=1;


то все норм работает.

ExternalDllFunction получаю через GetProcAddress
тип описан так:
Код: plaintext
1.
typedef int (__cdecl *func_t)();



Как можно это починить?
...
Рейтинг: 0 / 0
throw крешится после обращения к чужой dll
    #39377498
chikanok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прогнал отладчиком, библиотека портит стек(
...
Рейтинг: 0 / 0
throw крешится после обращения к чужой dll
    #39377524
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chikanokпрогнал отладчиком, библиотека портит стек(
может не библиотека портит стек, а кто-то другой?

параметров точно нет?
__cdecl или __stdcall ?

в отладчике это видно
...
Рейтинг: 0 / 0
throw крешится после обращения к чужой dll
    #39377572
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chikanokДобрый день.

Если внешняя библиотека отвечает ошибкой(!=0) приложение приложение должно выбросить исключение,
но на throw студия показывает
VisualStudioUnhandled exception at 0x30303030 in test.exe: 0xC00001A5: Обнаружен недопустимый обработчик исключений (parameters: 0x00000003).

ExternalDllFunction получаю через GetProcAddress
тип описан так:
Код: plaintext
1.
typedef int (__cdecl *func_t)();



Как можно это починить?

Учти, что речь в сообщении скорее всего идёт о другом виде исключений, о SEH, которые к С++ исключениям имеют мало отношения.

О экспорте функции ExternalDllFunction получаемую
авторчерез GetProcAddress тип описан так:
typedef int (__cdecl *func_t)();


также скажу, что лучше использовать заголовки и библиотеки импорта от этой самой библиотеки,
90% проблем связано именно с неверным импортом фукнций и данных и нарушением ABI.
...
Рейтинг: 0 / 0
throw крешится после обращения к чужой dll
    #39377578
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chikanok
Код: plaintext
1.
2.
3.
}catch(std::runtime_error e){
 ...
}





Также напоминаю, что ловить исключения нужно по ссылке , а не по значению.
В твоём коде ты делаешь срезку исключения до std::runtime_error.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / throw крешится после обращения к чужой dll
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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