我的应用程序崩溃了0x0eedfade异常。 在Windows事件日志中报告此异常,但未被应用程序异常处理程序捕获。为了更好地理解这可能发生的原因,我想创建一个产生相同错误的测试应用程序。
这个问题here的答案表明它是由跨模块边界引发Delphi异常引起的。鉴于此,我创建了一个抛出异常的Delphi库和一个调用库的Delphi exe。
图书馆代码
library Project2;
uses
SysUtils,
Classes;
{$R *.RES}
procedure DllException; export;
begin
raise Exception.Create('Library exception');
end;
exports DllException;
begin
end.
程序代码
unit test;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
procedure AppOnException(Sender: TObject; E: Exception);
public
end;
var
Form1: TForm1;
procedure DllException; external 'Project2.dll'
implementation
{$R *.DFM}
procedure TForm1.AppOnException(Sender: TObject; E: Exception);
begin
OutputDebugString(PChar(E.Message));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := AppOnException;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DllException;
end;
end.
我原以为这会产生0x0eedfade异常并导致程序崩溃。会发生什么错误信息显示基本上是"图书馆例外"程序继续进行。
如何创建一个产生0x0eedfade异常的测试应用程序?