Wir haben eine große Menge nativen C++ - Code, der in DLLs kompiliert ist.Destruktoren, die nicht aufgerufen werden, wenn die native (C++) Ausnahme zur CLR-Komponente weitergeleitet wird
Dann haben wir ein paar DLLs mit C++/CLI-Proxy-Code, um die C++ - Schnittstellen zu umhüllen.
Darüber hinaus haben wir C# -Code in die C++/CLI-Wrapper aufrufen.
Standard-Zeug, so weit.
Aber wir haben viele Fälle, in denen native C++ - Ausnahmen in die .Net-Welt propagieren dürfen und wir .Nets Fähigkeit, diese als System.Exception-Objekte zu umhüllen, und größtenteils funktioniert das gut.
Wir haben jedoch festgestellt, dass Destruktoren von Objekten im Bereich zum Zeitpunkt des Wurfs nicht aufgerufen werden, wenn sich die Ausnahme ausbreitet!
Nach einigen Recherchen haben wir festgestellt, dass dies ein ziemlich bekanntes Problem ist. Die Lösungen/Problemumgehungen scheinen jedoch weniger konsistent zu sein. Wir haben festgestellt, dass das Problem verschwindet, wenn der native Code mit/EHa anstelle von/EHsc kompiliert wird (zumindest in unserem Testfall). Allerdings würden wir lieber/EHsc verwenden, da wir SEH-Exceptions selbst in C++ - Exceptions übersetzen, und wir würden dem Compiler mehr Spielraum für die Optimierung geben.
Gibt es andere Problemumgehungen für dieses Problem - abgesehen davon, dass jeder Aufruf über die native verwaltete Grenze in einem (nativen) try-catch-throw (zusätzlich zur C++/CLI-Ebene) eingeschlossen wird?
hast du die richtige antwort dafür gefunden –
kann ich mich leider nicht mehr erinnern. – philsquared