我已经创建了一个 C++ DLL 并在 C# 应用程序中使用它。我应该如何报告错误?
使用异常并抛出
我的错误,或者在std::cout
或std::cerr
或其他什么地方打印它们?如果我在我的 DLL 中发出异常,我的 C# 应用程序是否能够捕获它?这方面的最佳行动方案是什么?
最佳答案
下面是 C# 的示例输出,使用 PInvoke 调用抛出 std::exception
的方法。
ex = System.Runtime.InteropServices.SEHException (0x80004005):
External component has thrown an exception.
at ConsoleTester.Program.throw_exception()
at ConsoleTester.Program.Main(String[] args) in ConsoleTester.cs:line 18
注意:在这种情况下,throw_exception() 是公开的 native 方法,它调用了一个子方法,但您看不到堆栈跟踪的那部分。对于最深的堆栈框架,您所获得的只是 native 边界。
因此,它并不完美,但确实有效。返回错误代码可能是处理此问题的最标准方法,但如果您是库的唯一使用者,它可能不会有太大区别。
注意:stdin/stdout 通常是最糟糕的错误处理方式。异常(exception)情况是编写一个自定义错误处理对象或一组例程,当出现问题时应用程序中的所有内容都可以访问,这并不是一件坏事。 (此类接口(interface)的输出有时可能是 stdin/stdout 或文件或配置时有用的任何内容)在这里考虑 log4j 或 log4net ...
通常,日志记录只是错误处理的一部分。您仍然需要向应用程序的其他部分发出信号以响应不利条件并(希望)从中恢复。在这里,只有错误代码或异常才能真正发挥作用(无论如何都要将异常从主程序流中减到最少)。
关于c# - 我应该如何处理基于 C++ 的 dll 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976187/