Я работаю над оберткой для какой-то огромной неуправляемой библиотеки. Почти каждая из его функций может вызывать некоторый обработчик ошибок внутри. Обработчик ошибок по умолчанию записывает ошибку в консоль и вызывает функцию abort(). Такое поведение нежелательно для управляемой библиотеки, поэтому я хочу заменить обработчик ошибок по умолчанию моим собственным, который просто выбросит какое-то исключение и позволит программе продолжить нормальное выполнение после обработки этого исключения. Обработчик ошибок должен быть изменен до того, как будет вызвана какая-либо из завернутых функций.
Библиотека обертки написана в управляемом C++ со статической связью с обернутой библиотекой, поэтому ничего подобного «тип с сотнями импорта dll» присутствует. Я также не могу найти один тип, который используется всем внутри библиотеки обертки. Поэтому я не могу решить эту проблему, указав статический конструктор в одном типе, который будет выполнять код, который мне нужен.Выполнить код при сборке
В настоящее время я вижу два пути решения этой проблемы:
определимся статического метода, как Library.Initialize(), который должен быть вызван один раз клиентом, прежде чем его код будет использовать какую-либо часть библиотеки оболочки ,
Найти минимальное подмножество типов, которое используется каждой функцией верхнего уровня (я думаю, что размер этого подмножества будет чем-то вроде 25-50 типов) и добавить статические конструкторы, вызывающие Library.Initialize (что будет внутренний в этом сценарии) для каждого из этих типов.
Я прочитал this и this вопросы, но они не помогли мне. Есть ли подходящие способы решения этой проблемы? Может быть, какие-то хорошие хаки?