gpt4 book ai didi

delphi - 如何在 DLL 中创建全局异常处理程序?

转载 作者:行者123 更新时间:2023-12-03 15:03:30 25 4
gpt4 key购买 nike

我正在使用一个 DLL,它有时会引发未处理的异常。我正在使用 madExcept 来检测和调试有错误的代码,但是当我最终部署 DLL 时,我希望在 DLL 中包含我自己的全局异常处理程序来记录异常。

所以问题是如何在 Delphi DLL 中设置全局异常处理程序?

最佳答案

“全局异常处理程序”的概念在 DLL 中并不像在 VCL 中那样存在。要理解原因,请记住异常是通过展开堆栈来传播的,直到找到处理程序为止。 VCL 可以安装全局异常处理程序,因为在 VCL 应用程序中,发生的所有事情(不包括启动和关闭)都会在调用堆栈中的某个位置有 TApplication.Run,这就是它放置异常处理程序的位置。由于您的 DLL 没有这样的单一中心点,因此您不能这样做。

您可以做的就是在 DLL 中的某处设置一个“中央异常处理程序例程”。它应该采用Exception对象作为参数。然后对所有导出的例程执行类似的操作:

procedure MyExportedRoutine(param: integer);
begin
try
//do normal stuff
except
on E: Exception do
CentralExeptionHandler(E);
end;
end;

这确实是您能做的最好的事情,除非您使用 COM。如果您正在编写 COM DLL,请使用 safecall 调用约定标记您的接口(interface)方法,编译器将默默地为您生成处理异常传播的代码。

关于delphi - 如何在 DLL 中创建全局异常处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com