vs2017调试模式下报错:System.Runtime.InteropServices.SEHException (0x80004005): 外部组件发生异常

oldhunter 2020-11-08 04:07:18
开发环境是:vs2017+win10
vs调试模式下,经常出现以下错误(导致窗口关闭,算是非捕获异常)
但直接打开编译好的程序时,就不会报错。

System.Runtime.InteropServices.SEHException (0x80004005): 外部组件发生异常。
在 System.Windows.Forms.UnsafeNativeMethods.ImmSetOpenStatus(HandleRef hIMC, Boolean open)
在 System.Windows.Forms.ImeContext.SetOpenStatus(Boolean open, IntPtr handle)
在 System.Windows.Forms.ImeContext.SetImeStatus(ImeMode imeMode, IntPtr handle)
在 System.Windows.Forms.Control.WmImeKillFocus()
在 System.Windows.Forms.Control.WmKillFocus(Message& m)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.TextBoxBase.WndProc(Message& m)
在 System.Windows.Forms.TextBox.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
...全文
9303 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldhunter 2020-11-17
  • 打赏
  • 举报
回复
引用 4 楼 wanghui0380 的回复:
另外seh异常是可以拦截的

try

catch(SEHException seh) //正常的Exception无法拦截,但是特别指定就可以拦了。可以尝试拦截了在看是啥问题


非常感谢!我试一下,用 catch(SEHException seh)看能否拦截。
wanghui0380 2020-11-16
  • 打赏
  • 举报
回复
另外seh异常是可以拦截的 try catch(SEHException seh) //正常的Exception无法拦截,但是特别指定就可以拦了。可以尝试拦截了在看是啥问题
wanghui0380 2020-11-16
  • 打赏
  • 举报
回复
大部分情况下,我们相信C++的第3方程序是好的,无误的(如果有误,那是无解的,你必须去那个第3方的C++提供者那里提交issue,已寻求帮助) 那么我们这边正常情况是,尝试静态化对象,尝试解除gc,尝试正确的关闭。因为假设第3方无误,那么就是我们自己有问题。大多数情况是C++访问了已被gc释放的对象,所以要么我们尝试静态化,或者声明不让gc管(我们自己管),或者先结束C++调用在关闭我们自己的东西
wanghui0380 2020-11-16
  • 打赏
  • 举报
回复
那不是你的错SEHException是c++抛出来的,你应该引用了一些用c++写的组件
oldhunter 2020-11-16
  • 打赏
  • 举报
回复
目前这个问题仍未解决。
在异常中看到 SetImeStatus 字样,会跟输入法有关系吗?

110,533

社区成员

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

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

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