ActiveX没有引发EOleException

时间:2013-04-23 14:05:59

标签: delphi exception activex

我在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)

1 个答案:

答案 0 :(得分:1)

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