2

我在单独的项目中在 Delphi XE2 中制作了两个 activex 组件。其中一个组件运行良好,它抛出的每个异常都被屏蔽为 EOleException。在另一个 activex 组件上,异常没有被屏蔽,它们作为它们的原始类型被抛出。客户端是一个delphi XE 程序。

当 activex 组件抛出原始异常时,该组件对任何其他方法的下一次调用会在不应发生的地方抛出访问冲突异常,例如使用值设置本地字符串变量。这是一种非常奇怪的行为。

我比较了两个项目的 .ridl 文件、编译选项、.dproj 文件,都找不到罪魁祸首。

有人知道这种差异/奇怪行为的原因吗?

谢谢

编辑:一些代码

有效的组件 1(屏蔽 EOleException 的所有异常)

TspdMyClassX = class(TActiveXComponent, MyInterface)

...

initialization


TActiveXComponentFactory.Create(
    ComServer,
    TspdMyClassX,
    CLASS_spdMyClassX,
    1,
    '',
    0,
    tmBoth);

其他不抛出EOleException的组件接口不同,但其余代码相同(初始化,父类TActiveXComponent)

4

1 回答 1

1

在我看来,问题出在 delphi XE2 生成的 .ridl / .tlb 文件上。我使用 delphi 7 重新设计了组件,然后在 delphi xe2 中打开了项目,并且只在其中编译/构建(.ridl 中没有编辑,delphi xe2 中的 TLB 没有变化)。EOleException 正确屏蔽了所有异常,问题已解决

于 2013-04-24T17:11:48.490 回答