COM接口始终屏蔽异常消息"灾难性故障"

dmd*_*ini 5 delphi message activex exception

我有一个带有4个接口的Delphi ActiveX项目.其中两个为其CoClasses提供了AutoComObject工厂.接口的所有方法都使用safecalls声明.在与工厂的接口中,如果在任何方法中抛出异常,则调用方将收到EOleException,其中包含来自activex中原始异常的异常消息.但是在其他两个接口中,任何异常都被屏蔽为EOleException,并且消息被屏蔽为"灾难性故障".

任何人都知道为什么会发生这种情况,以及如何使原始异常消息不被屏蔽?

Rem*_*eau 9

如果未处理的异常转义safecall类的方法,TObject.SafeCallException()则调用该异常将异常转换为HRESULT错误代码,然后由COM返回给调用者.默认情况下,TObject.SafeCallException()始终返回E_UNEXPECTED($8000FFFF).类可以覆盖SafeCallException()以返回更有意义的内容HRESULT. TComObjectTAutoIntfObject做到这些,例如(也叫SetErrorInfo()着手例外,它调用者可以检索使用的详细信息GetErrorInfo(),如果需要的话).所以听起来你的两个AutoComObject对象有一个SafeCallException()实现,而你的另外两个对象没有.