jpf*_*ius 4 delphi dll exception-handling
在Delphi中处理DLL内部异常的正确方法是什么?
像这样的东西
on E : ESomeException do ...
Run Code Online (Sandbox Code Playgroud)
要么
if (E is ESomeException) then ...
Run Code Online (Sandbox Code Playgroud)
失败,因为DLL和主应用程序的单独类型注册表.
对于纯DLL,不允许异常跨越DLL边界(如Deltics提及) - 无论使用何种语言.
你会遇到各种各样的麻烦,特别是因为你不知道边界的每一边都有哪种语言,RTL,内存管理器等.
所以你回到了经典的错误处理范例:
您可以使用BPL软件包(如Lars建议的那样)代替DLL,您知道双方都将使用相同的RTL和内存管理器.
包和BPL通常都会给你一个版本化的噩梦(太多的自由度).
更严格的解决方案是使用单片可执行文件; 这解决了两个问题:
--jeroen
PS:我已经做了一个额外的答案,因为这样可以更容易地粘贴链接.
最安全的方法是不允许异常首先从DLL中"逃逸".
但是,如果您无法控制DLL的源代码,因此无法确保这一点,您仍然可以测试异常类名称:
if SameText(E.ClassName, 'ESomeException') then ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3986 次 |
| 最近记录: |