【发布时间】:2016-03-15 11:24:33
【问题描述】:
我有一个 C# 应用程序,它引用了一个 CLI/C++ 程序集,该程序集通过标头中的一些外部“C”方法([DllImport] 属性)与非托管 dll 进行互操作。
一切都很好,即使不是有点复杂。 所有这些都存在于其中的项目围绕这个最终的非托管 DLL 进行测试,因此它的稳定性是不确定的。
当非托管 DLL 崩溃时,上面的当前系统有什么方法可以不关闭 C# 和 cli/C++ 程序集?我不相信有,因为内存空间太庞大了,但谢天谢地,SO 在很多情况下证明我错了。
【问题讨论】:
-
非托管 DLL 的约定是,如果传递了有效的输入,它永远不会抛出异常。您应该确保 DLL 遵守合同。
-
因为这个项目是为了测试目的(通过与被测产品交互)——我不能依赖任何这样的合同,这个软件本质上是在验证合同。此外,AUT 是 C/C++ 代码,因此并未真正使用异常。不一定会传入有效的输入,这是一个测试基础设施,崩溃只会破坏整个过程 - 无论我包装调用多少次尝试/捕获。
标签: c# interop pinvoke unmanaged managed-c++