Ich habe mehrere Dutzend Objekte, die durch COM-Schnittstellen dargestellt werden, von denen jedes viele Methoden hat, insgesamt einige hundert Methoden. Diese Schnittstellen geben Geschäftsobjekte aus meiner Anwendung an eine Skripting-Engine weiter.
Ich habe die Aufgabe erhalten, jede einzelne dieser Methoden vor dem Auslösen von Ausnahmen zu schützen (sie abzufangen und einen Fehler mit Hilfe der COM-Funktion Error()
Funktion, zu der ich übrigens keine Dokumentation finden kann, weil es unmöglich ist, sie zu googeln). Nach meinem Verständnis erfordert dies, dass ich ein Try/Catch um die Eingeweide von jeder dieser Methoden hinzufügen. Die Catch-Blöcke werden für jede einzelne dieser Hunderte von Methoden ähnlich oder identisch sein, was stark nach einem Problem riecht (verstößt massiv gegen das DRY-Prinzip), aber mir fällt keine Möglichkeit ein, die Änderung jeder Methode zu vermeiden. Soweit ich das beurteilen kann, werden diese Methoden direkt von COM aufgerufen, ohne zwischengeschalteten Code, in den ich einhaken kann, um die Ausnahmen abzufangen. Meine derzeit beste Idee ist, ein Makro für den Catch-Block zu machen, aber das hat seine eigene Art von Code-Geruch. Kann jemand mit einem besseren Ansatz kommen?
BTW, meine app Ausnahmen nicht von std::exception ableiten, so dass, wenn es irgendeine Möglichkeit der COM automatisch Behandlung von Standardausnahmen ist, es nicht helfen wird. Und ich kann leider nicht die vorhandenen Ausnahmen ändern, um von std::exception ableiten.