Исключения из DLL / общих библиотек

Предположим, вы разрабатываете библиотеку с классами, которые нужно экспортировать через DLL (в Windows или аналогичную разделяемую библиотеку, такую ​​как общие библиотеки Linux ELF). Функции-члены в этих классах генерируют исключения либо из стандартной библиотеки, либо из определенных библиотек исключений.

Совершенно безопасно кодировать в библиотеках DLL, чтобы генерировать исключения для модулей, отображающих адресное пространство DLL? Какие соображения следует учитывать при разработке программных компонентов в общих библиотеках, из которых исключения выбрасываются в клиентские модули?

Большое спасибо.

Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
2
0
1 306
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для ваших библиотек вполне разумно создавать исключения или позволять исключениям всплывать из базового фреймворка. Однако вы должны быть осторожны, документируя это поведение для пользователей вашей библиотеки, чтобы потребитель вашего кода мог предпринять соответствующие действия для обработки любых исключений, которые могут быть сгенерированы (или не обнаружены) вашим кодом.

Ответ принят как подходящий

Я согласен с тем, что вполне разумно ожидать, что исключения, переброшенные через границы библиотеки, будут работать нормально. Однако не удивляйтесь, если вы столкнетесь с несколькими сбоями. Поиск в Google по запросу "исключения общих объектов gcc" (также проверьте группы) показывает, что многие люди сталкивались с множеством проблем на протяжении многих лет. В последний раз, когда я пробовал это с помощью gcc (около 2003 г.), я сдался, потому что у меня это просто не сработало. Надеюсь, с тех пор все наладилось.

Другие вопросы по теме