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