Delphi捕捉DLL执行所抛出的异常。(转)
2010-08-27 14:00
288 查看
Dll文件的。
先看代码:
[/code]
先看代码:
unit frm_LoginU; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, pub_Event; type Tfrm_Login = class(TForm) E_User: TEdit; E_PassWD: TEdit; btn_Login: TButton; btn_Exit: TButton; procedure FormKeyPress(Sender: TObject; var Key: Char); procedure btn_ExitClick(Sender: TObject); procedure btn_LoginClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } DoLoginClick: TLoginClickEvent; DoErrCatch:TExceptionEvent; end; var frm_Login: Tfrm_Login; implementation {$R *.dfm} procedure Tfrm_Login.FormKeyPress(Sender: TObject; var Key: Char); begin if key = #13 then begin Key := #0; Keybd_Event(VK_TAB, 0, 0, 0); end; end; procedure Tfrm_Login.btn_ExitClick(Sender: TObject); begin self.close; end; procedure Tfrm_Login.btn_LoginClick(Sender: TObject); begin if Assigned(DoLoginClick) then begin try DoLoginClick(trim(E_User.Text), Trim(E_PassWD.Text)); except on e:Exception do DoErrCatch(sender,e); end; end; end; procedure Tfrm_Login.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; end; end. 全部都出来了,我说下我这个DLL的登录验证窗体的工作方式:把登录的验证方法放在主程序里面,因为,不同时期不同的开发项目,其登录验证方式都不一样,因此独立出主程序里,采用回调的方式来实现。由于登录窗体需要到数据库中去验证帐号和密码,因此,我特意把字段输错,这里所报的异常不会被主程序捕捉到,为何不会被主程序捕捉到?我猜是因为调用这个验证方法是一个DLL,而DLL毕竟不是主程序,因此,其错误消息是不会被主程序所捕捉到的,就算开始的时候把application传到了dll里面去也一样捕捉不到(如果能捕捉到的,请把方法告诉我,我找了很久都没找到相关的资料),在网上找了个资料,网址是: http://www.delphibbs.com/delphibbs/dispq.asp?lid=3660866 根据这个提示,我把异常处理的方法也传进去了,这样,在验证登录方法时出错了,也能调用主程序中的捕捉异常的方法。 转http://www.cnblogs.com/kfarvid/archive/2010/08/06/1794307.html
[/code]
相关文章推荐
- Delphi捕捉DLL执行所抛出的异常。
- Delphi捕捉DLL执行所抛出的异常。
- 线程中抛出未捕捉的异常会如何? [修正版]
- php抛出异常与捕捉特定类型的异常详解
- 外部无法捕捉Realm的doGetAuthenticationInfo方法抛出的异常
- Python异常捕捉try except else finally有return时执行顺序探究
- PHP中入异常处理 抛出异常,try catch 捕捉进行处理
- Delphi之Raise抛出异常
- java中使用javac编译时报错:未报告的异常 java.net.MalformedURLException;必须对其进行捕捉或声明以便抛出
- 主线程捕捉线程池中线程抛出的异常
- Delphi从应用程序资源中直接执行dll(不用先把dll存到磁盘上)
- Objective-C:除数为0的情况下异常的处理(检测、抛出、捕捉、处理)
- 关于java 异常捕捉 ( try catch finally ) 执行流程
- 捕捉异常中try、catch和finally的执行顺序
- java 网络 socket TCP / UDP / catch 语句块捕捉到异常后,继续执行语句块后面的代码
- AsyncHttpClient放在子线程执行时抛出异常的解决方法
- java 方法超过执行时间后抛出异常
- JAVA:内层方法抛出异常 外层方法捕捉并处理异常
- java中异常抛出后代码还会继续执行吗?
- Android:java 抛出异常throw与throws以及捕捉异常try、catch、finally学习