【问题标题】:application-defined exception (code 0x0eedfade) after actual exception实际异常后的应用程序定义异常(代码 0x0eedfade)
【发布时间】:2015-08-18 13:30:05
【问题描述】:

早在我加入公司之前,我就有一段用 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)在......”弹出。之后我会遇到访问冲突。

【问题讨论】:

  • 很难在没有更多上下文的情况下发表评论。
  • 很可能是内存损坏。
  • 等等,所以,在引发异常后,您会看到一个弹出窗口说引发了异常?您还期望发生什么?
  • @S.Langhammer 是的,这就是 IDE 告诉您引发了异常。
  • 检查您的异常处理。任何unhandled Delphi exception 都会产生代码0x0eefade

标签: delphi exception dll


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 2013-05-12
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多