0

我们有一个 C# 程序,它调用 C++ dll 中的函数来完成实际工作。这些函数都有输出参数,如果出现问题可能会抛出异常。在互操作障碍上抛出异常似乎工作正常。我们遇到的问题显然是,即使发生异常,编组器也会尝试从函数中检索输出参数。在某些情况下,这些将没有正确的值(由于异常),这会导致进程崩溃,并在 mscorlib.dll 中出现访问冲突。

在完成任何工作之前将所有输出参数初始化为有效值(例如 null)当然是可能的。然而,忘记其中之一的惩罚是严重的。

我们的分析是,当抛出异常时,marshaler 也会运行,对吗?有没有办法防止这种情况?

TIA。

4

0 回答 0