【问题标题】:Delphi - External exception C0000008 when application is run from within the IDEDelphi - 从 IDE 中运行应用程序时的外部异常 C0000008
【发布时间】:2011-04-25 12:09:42
【问题描述】:

从 IDE 中运行应用程序并附加调试器时,当它尝试连接到导入的 ActiveX 控件时会引发异常“外部异常 C0000008”。

如果应用程序独立运行或未选中 Rad Studio 选项/调试器选项/集成调试,则程序按预期工作,无异常,ActiveX 控件返回预期结果。

项目中还有其他的ActiveX控件,都可以正常工作。

我尝试过: - 重新安装 ActiveX 控件 - 重新导入 ActiveX 控件 - 删除任何可能导致冲突的软件(专家/插件等) - 关闭大多数正在运行的应用程序和服务等,以防它们引起冲突

搜索Google,好像其他人也遇到过同样的问题,但是没有找到解决办法(除了关闭集成调试,但显然这不是一个有效的选项。

有没有人想解决这个问题?

我使用的是 Delphi 2007

【问题讨论】:

    标签: delphi activex


    【解决方案1】:

    C0000008 是为无效句柄返回的状态。确保您的包装器在创建对象时为其提供正确的句柄而不是 nil(假设它由于 Windows 句柄而崩溃)。

    由于应用程序在未附加到调试器时运行良好,我假设包装器正在优雅地处理这种情况,因此错误很可能发生在 try/except 块中。

    【讨论】:

      【解决方案2】:

      它是非显而易见的函数行为和 IDE 选项的组合。

      MSDN CloseHandle

      如果应用程序在调试器下运行,如果函数接收到无效的句柄值或伪句柄值,它将抛出异常。如果您关闭一个句柄两次,或者如果您对 FindFirstFile 函数返回的句柄调用 CloseHandle 而不是调用 FindClose 函数,就会发生这种情况。

      因此有两个选项 - 检查代码以查找正在关闭某些无效句柄的位置,或者关闭 IDE 对此异常的通知。转到Tools > Options > Debugger options > Emb debuggers > Native OS exceptions,找到Invalid Handle 项目并将On resume 选项更改为Run handled。这对我有用。

      此解决方案的积分转到 sql.ru 论坛的 _Vasilisk_

      【讨论】:

        猜你喜欢
        • 2018-04-18
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 2018-06-13
        • 1970-01-01
        • 1970-01-01
        • 2017-11-08
        • 1970-01-01
        相关资源
        最近更新 更多