如何获取CDO.Message的错误代码

时间:2013-10-30 14:02:33

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

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

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

当我使用Send方法(?)时,它返回一个HResult。 但它很有意思,因为HResult无法获取错误代码,因为Send似乎是一个真正的方法,可以解决问题。 因此,如果我之前设置为此值,则结果代码为-1。

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

我可以捕获异常,但它只包含错误消息:

“传输无法连接到服务器”

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

您是否知道从Delphi XE3获取错误代码值的技术?

1 个答案:

答案 0 :(得分:1)

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

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

引发的异常将为EOleSysError,并且其属性ErrorCode包含您要查找的HRESULT

所以,你需要:

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

这一切都在房子周围。如果您更愿意避免异常处理,那么您始终可以重新编写COM接口声明,使其成为返回stdcall的真HRESULT方法。