0

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

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

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

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

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

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

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

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

4

1 回答 1

1

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

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

引发的异常将是EOleSysError并且具有ErrorCode包含HRESULT您要查找的属性的属性。

因此,您需要:

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

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

于 2013-10-30T14:16:11.193 回答