C#调用c++时的异常 如何捕获

天罡gg 2013-12-10 10:40:01
最近使用C#调用c++的DLL,程序运行一段时间后总是会自动退出。
全局异常处理我是这么做的

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException
+= new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException
+= new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);


可是还是捕获不到全部的异常。现在知道的是,调用c++时非法内存,程序肯定退出。
像这样:CPC_Event_Data是一个自定义的结构体

CPC_Event_Data EventData = (CPC_Event_Data)Marshal.PtrToStructure(
new IntPtr(0x00000005), typeof(CPC_Event_Data));
...全文
946 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
痒痒挠儿 2013-12-16
  • 打赏
  • 举报
回复
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); Application.Run(new MainFrame()); static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { }
saybookcat 2013-12-12
  • 打赏
  • 举报
回复
如果主程序会退出 ,可以加个全局异常捕捉看看能起作用不
rtdb 2013-12-12
  • 打赏
  • 举报
回复
实在不行的话,就把调用部分单独出来,封装成EXE, 它独立运行的话至少不会连累主程序。
天罡gg 2013-12-12
  • 打赏
  • 举报
回复
引用 8 楼 akirya 的回复:
多找找dll的问题吧。 有些异常会造成程序异常退出,无法捕获的。别说C#就C++也做不到。
大神谢谢。 看来只能从细处着手了,程序的稳定还真不是那么容易的哦。
  • 打赏
  • 举报
回复
多找找dll的问题吧。 有些异常会造成程序异常退出,无法捕获的。别说C#就C++也做不到。
天罡gg 2013-12-11
  • 打赏
  • 举报
回复
这样的问题应该很典型的啊。。
天罡gg 2013-12-10
  • 打赏
  • 举报
回复
引用 5 楼 zealot112345 的回复:
.net 3.5 以前的版本,可以在配置文件中添加

<configuration>
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true"/>
</runtime>
</confguration>
你可以试试。
再次说声谢谢!我刚试过,不起作用。程序会直接退出。
zealot112345 2013-12-10
  • 打赏
  • 举报
回复
.net 3.5 以前的版本,可以在配置文件中添加

<configuration>
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true"/>
</runtime>
</confguration>
你可以试试。
PSSonyXbox 2013-12-10
  • 打赏
  • 举报
回复
基本都是 try ---cache呀
天罡gg 2013-12-10
  • 打赏
  • 举报
回复
zealot112345 谢谢。 我用的是.NET2.0,所以HandleProcessCorruptedStateExceptions是用不上的。 继续等回复
wyufen 2013-12-10
  • 打赏
  • 举报
回复
我也学习下……
zealot112345 2013-12-10
  • 打赏
  • 举报
回复
.net 40 中,c# 默认情况下只处理SEH的异常。不处理CSE的异常。若你要捕获这类的异常。 你需要再对应的方法上面加上

[HandleProcessCorruptedStateExceptions]
[SecurityCritical]
void HandleCPPException()
{
    try{
       //do some native exception
       }
    catch(system.accessvioliationexception) //捕获cse类型的异常
      {}
}

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧