【问题标题】:How to get the Error Code of CDO.Message如何获取 CDO.Message 的错误代码
【发布时间】:2013-10-30 14:02:32
【问题描述】:

我编写了使用 CDO.Message 的例程。它很久以前就开始工作了。 但是现在,在某些站点中,他们安装了证书,然后之前的工作版本在所有调用中都出错了。

我使用简单的变体来保存 CDO.Message COM 对象。

当我使用发送方法(?)时,它返回一个 HResult。 但它很有趣,因为 HResult 无法用于获取错误代码,因为 Send 似乎是一个真正的方法,它会在问题上产生异常。 所以如果我之前设置了这个值,结果代码是-1。

我尝试使用 GetLastError 获取最后一个错误代码。但这是 0。

我可以捕捉到异常,但它只包含错误消息是什么:

“传输连接服务器失败”

VB 代码可以获得错误代码,该错误代码可以提供有关问题(或不提供)的额外信息。

你知道从 Delphi XE3 获取错误码值的技术吗?

【问题讨论】:

    标签: delphi error-handling certificate transport cdo.message


    【解决方案1】:

    如果我们手头有一些源代码会更好。特别是 COM 接口的 Delphi 声明。

    我的猜测是该方法被声明为safecall。这意味着编译器理解该方法实际上是stdcall返回HRESULT,并重新编写参数以匹配。如果真正的 COM 方法返回 HRESULT 而不是 S_OK,则编译器会编写代码来检查它并将错误转换为异常。

    引发的异常将是EOleSysError,并且具有属性ErrorCode,其中包含您正在寻找的HRESULT

    所以,你需要:

    • 添加异常处理程序以捕获EOleSysError
    • 读取您捕获的EOleSysError 异常实例的ErrorCode 属性。

    这一切都在房子周围。如果您希望避免异常处理,那么您始终可以将 COM 接口声明重写为真正的 stdcall 方法,返回 HRESULT

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 2013-10-17
      • 2018-07-28
      • 2018-11-16
      • 2012-11-07
      • 2020-09-18
      • 1970-01-01
      相关资源
      最近更新 更多