在 C# 中捕获本机C++异常
Catching native C++ exceptions in C#
我有一些本机C++类库,我已经将它们包装在C++.NET中,然后我从C#调用它们(三层!
我可以抛出C++ .NET 中的异常,并愉快地在 C# 中捕获它们。麻烦的是,我捕获本机C++异常的唯一方法是捕获System.Exception,这很好,但是在从std::exception到System.Exception的转换中,我丢失了有关错误的绝大多数信息(例如错误消息!我可以在 C++ .NET 层中捕获本机异常并作为 .NET 异常重新抛出,但这是一个侵入性解决方案,需要我在C++每次 .NET 方法调用周围放置 try-catch 块(以捕获本机异常并重新抛出)。
有没有替代解决方案来做到这一点,或者我只需要弄脏我的手......
你将不得不弄脏你的手,但你可以通过创建一个预处理器宏来封装所有重复的捕获逻辑来减少工作量。
我假设您希望捕获几种不同类型的异常,例如MFC CException,std::exception以及SEH异常。
您可能 还想编写包装函数以返回 HRESULTS 并使用 SetErrorInfo(即转换为 COM 错误代码和错误信息) - 您可能会决定这为 .Net 提供了一个更干净的接口,可以很好地将其转换为 .Net 异常。这将避免对 C++.Net 层的需求,并允许您使用 P/Invoke,以及使其可从 VBA 调用。
或者你可能不会......只是指出选项!
相关文章:
- 从C++本机插件更新Vector3数组
- GCC本机矩阵运算库
- VC++本机单元测试,找不到调试符号
- 在这种情况下,java对象是否可以调用本机函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 无法将标准库导入本机 android 项目中的头文件
- 使用本机 C++ 应用程序中的 C# 代码
- 在nodejs中使用本机代码的最佳方法是什么?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在自定义程序中使用本机 Windows 自然顺序排序
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- MS 本机单元测试 - 断言::线程失败不起作用
- 将音频从浏览器流式传输到WebRTC本机C++应用程序
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- C++/CLI 混合托管/本机 DLL 不起作用
- 子系统中的异常处理:本机
- 多次调用本机方法时出现致命错误
- 如何使用 Malloc 调试来检查本机内存泄漏?
- 使用本机 JNI 静态方法实现C++ Java 运行时错误