求助关于C#处理异常的问题

LastLoss 2015-07-31 11:57:20
调用别人写的dll,不知道什么语言写的,我在外面catch不到里面出现的异常,这种异常应该如何判断?就是说外面整个try catch块是写好的,但是运行软件的时候会弹出无响应。能肯定是dll的问题,还有其他办法能判断异常么?
...全文
241 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
至_尊_宝 2015-08-03
  • 打赏
  • 举报
回复
当然得是C#的
至_尊_宝 2015-08-03
  • 打赏
  • 举报
回复
第三方开源的,都没有加密,可以反射看看里面方法怎么实现的。
  • 打赏
  • 举报
回复
引用 楼主 u014705690 的回复:
调用别人写的dll,不知道什么语言写的,我在外面catch不到里面出现的异常,这种异常应该如何判断?就是说外面整个try catch块是写好的,但是运行软件的时候会弹出无响应。能肯定是dll的问题,还有其他办法能判断异常么?
你怎么知道人家dll应该在什么测试用例下抛出异常?有根据吗?有就贴出来。
ajianchina 2015-08-02
  • 打赏
  • 举报
回复
第一个解决方案写完整一些

[DllImport("xxx.dll")] 
private extern static void abc(); 

[HandleProcessCorruptedStateExceptions]
static void Main(string[] args) 
{ 
	try 
	{
		abc();
	} 
	catch (Exception e) 
	{ 
		//...
	} 
} 
ajianchina 2015-08-02
  • 打赏
  • 举报
回复
.NET 4.0之后,CLR会对异常做出区分,针对SEH异常将其标识为破坏性异常。CLR的catch块不会捕捉这些异常。 解决方案: 1、在函数外面添加HandleProcessCorruptedStateExceptions属性,该属性只控制当前函数,不对其他托管程序函数构成影响。

[HandleProcessCorruptedStateExceptions]
static void Main(string[] args) 
{ 
    try 
    { 
    } 
    catch (Exception e) 
    { 
    } 
}
2、在配置文件中启用legacyCorruptedStateExceptionsPolicy属性,如:config:

<?xml version="1.0"?>
<configuration>
 <startup>
 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
 </startup>
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>
</configuration>
LastLoss 2015-08-02
  • 打赏
  • 举报
回复
引用 5 楼 故乡山川的回复:
非托管代码的异常,catch不到的。 在程序启动的时候,注册非UI线程异常,试下
//处理UI线程异常
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            //处理非UI线程异常
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            //处理未捕获的异常
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
               //记录异常日志
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            //记录异常日志
        }
private void searchEmail1_Click(object sender, RoutedEventArgs e) { try { Net newEmail = new Net();//创建一个新的邮件接口 int emailTotalNumber = 0; emailTotalNumber = newEmail.lxj_ConnectMail("邮箱帐号", "密码", "pop3.163.com"); dynamic mailSingleHeader = null; // 数组,含五个元素,依次为时间、发件人、发件人邮箱、标题、邮件头全文 mailSingleHeader = newEmail.lxj_GetMailSingleHeader(emailTotalNumber); DateTime x = mailSingleHeader[0]; MessageBox.Show(x.ToString()); } catch (Exception ex) { MessageBox.Show(ex.Message); } } 这是需要处理的那个方法,如何加入你这个异常处理?新手不太懂、
807254150 2015-08-01
  • 打赏
  • 举报
回复
既然都不知道什么语言写,还用
江南小鱼 2015-08-01
  • 打赏
  • 举报
回复
非托管代码的异常,catch不到的。 在程序启动的时候,注册非UI线程异常,试下
//处理UI线程异常
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            //处理非UI线程异常
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            //处理未捕获的异常
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
               //记录异常日志
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            //记录异常日志
        }
LastLoss 2015-08-01
  • 打赏
  • 举报
回复
引用 2 楼 qq7413755的回复:
关键问题是,估计DLL有问题,里面的代码还不把异常抛出来。。。那。。。
有办法么
LastLoss 2015-08-01
  • 打赏
  • 举报
回复
引用 1 楼 807254150的回复:
既然都不知道什么语言写,还用
有没有办法catch他的异常啊。需要他的一些功能。自己写太麻烦。
黑黑黑眼圈 2015-08-01
  • 打赏
  • 举报
回复
关键问题是,估计DLL有问题,里面的代码还不把异常抛出来。。。那。。。
tcmakebest 2015-08-01
  • 打赏
  • 举报
回复
DLL一般是不会抛异常的, 只会返回错误代码, 没有相关说明其他很难使用DLL.

111,120

社区成员

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

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

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