实际异常后的应用程序定义的异常(代码0x0eedfade)

时间:2015-08-18 13:30:06

标签: delphi exception dll

我有一段用Delphi编写的遗留代码,早在我加入公司之前,IDE的行为让我怀疑自己的很多技能。

加载DLL并从DLL中分配函数OpenDB,GetError和GetErrorStr后,将调用此代码:

If @OpenDB <> nil then
begin
  DB_num := OpenDB((PAnsiChar(file)));
  if DB_num = -1 then
  begin
    err := GetError;
    ErrorString := GetErrorString(err);
    raise Exception.Create(ErrorString);
    Exit;
  end
end else
  Exit;

OpenDB返回-1并且GetErrorString返回错误消息并引发异常。没有什么大不了的,存在错误的数据库,并且总是会发生错误。让我感到惊讶的是,在引发异常之后,“...应用程序定义的异常(代码0x0eedfade)在...”弹出。之后,我得到了访问权限。

1 个答案:

答案 0 :(得分:2)

错误消息表示您将跨模块边界的Delphi异常提升为一段不知道如何处理Delphi异常的代码。 0x0EEDFADE是Delphi raise语句传递给Win32 RaiseException()函数的dwExceptionCode参数的值。只有Delphi和C ++ Builder RTL知道如何处理这些异常。您绝不能跨模块边界引发异常,因为一个模块不知道另一个模块是否可以处理它。不同的模块可以用不同的语言/框架编写。