Delphi - 从IDE中运行应用程序时的外部异常C0000008

时间:2010-10-14 15:53:46

标签: delphi activex

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

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

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

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

搜索Google,看起来其他人遇到了同样的问题,但没有找到修复程序(除了关闭集成调试,但显然这不是一个有效的选项。

是否有人想要解决这个问题?

我正在使用Delphi 2007

2 个答案:

答案 0 :(得分:2)

C0000008是无效句柄返回的状态。确保你的包装器在创建对象时给它一个合适的句柄而不是nil(假设它因窗口句柄而崩溃)。

由于应用程序在未附加到调试器时运行正常,我假设包装器正在正常处理此条件,因此错误很可能发生在try / except块中。

答案 1 :(得分: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_