Ich arbeite an Wrapper für einige große unmanaged Bibliothek. Fast jede seiner Funktionen kann einen Fehler-Handler tief in sich aufrufen. Der Standardfehlerhandler schreibt einen Fehler in die Konsole und ruft die Funktion abort() auf. Dieses Verhalten ist für die verwaltete Bibliothek unerwünscht. Daher möchte ich den Standardfehlerhandler durch meinen eigenen ersetzen, der nur eine Ausnahme auslöst und das Programm nach der Behandlung dieser Ausnahme normal weiterlaufen lässt. Der Fehlerhandler muss geändert werden, bevor eine der umgebrochenen Funktionen aufgerufen wird.
Die Wrapper-Bibliothek ist in verwaltetem C++ mit statischer Verknüpfung zu Wrapped Library geschrieben, also ist nichts wie "ein Typ mit Hunderten von DLL-Importen" vorhanden. Ich kann auch keinen einzigen Typ finden, der von allem in der Wrapper-Bibliothek verwendet wird. Also kann ich dieses Problem nicht lösen, indem ich einen statischen Konstruktor in einem einzigen Typ definiere, der Code ausführen wird, den ich brauche.Code beim Laden der Baugruppe ausführen
ich zur Zeit zwei Möglichkeiten sehen, dieses Problem zu lösen:
einige statische Methode wie Library.Initialize definieren(), die eine Zeit von Client aufgerufen werden muss, bevor sein Code eines beliebigen Teil der Wrapper-Bibliothek verwenden .
Finden Sie die minimale Teilmenge von Typen, die von jeder Funktion auf oberster Ebene verwendet wird (ich denke, die Größe dieser Teilmenge wird etwa 25-50 Typen sein) und statische Konstruktoren Aufruf Library.Initialize (was sein wird intern in diesem Szenario) für jeden dieser Typen.
Ich habe this und this Fragen gelesen, aber sie haben mir nicht geholfen. Gibt es geeignete Möglichkeiten, dieses Problem zu lösen? Vielleicht ein paar nette Hacks verfügbar?