gpt4 book ai didi

delphi - COM接口(interface)总是用 "catastrophic failure"屏蔽异常消息

转载 作者:行者123 更新时间:2023-12-03 15:06:47 25 4
gpt4 key购买 nike

我有一个带有 4 个接口(interface)的 Delphi ActiveX 项目。其中两个拥有用于其 CoClass 的 AutoComObject 工厂。接口(interface)的所有方法均通过安全调用声明。在与工厂的接口(interface)中,如果在任何方法中抛出异常,调用者都会收到一个 EOleException,其中包含来自 activex 中原始异常的异常消息。但在其他两个接口(interface)中,任何异常都会被屏蔽为 EOleException,消息被屏蔽为“灾难性故障”。

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

最佳答案

如果未处理的异常逃逸类的 safecall 方法,TObject.SafeCallException()调用该异常将异常转换为 HRESULT 错误代码,然后由 COM 将其返回给调用者。默认情况下,TObject.SafeCallException() 始终返回 E_UNEXPECTED ($8000FFFF)。类可以重写 SafeCallException() 以返回更有意义的 HRESULT。例如,TComObjectTAutoIntfObject 正是这样做的(它们还调用 SetErrorInfo() 来设置有关异常的详细信息,如果需要,调用者可以使用 GetErrorInfo() 检索这些信息) 。因此,听起来您的两个基于 AutoComObject 的对象具有 SafeCallException() 实现,而其他两个对象则没有。

关于delphi - COM接口(interface)总是用 "catastrophic failure"屏蔽异常消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com