Delphi 如何获取CDO.Message的错误代码
我编写了使用CDO.Message的例程。它很久以前就开始工作了。 但是现在,在一些站点上,他们安装了一个证书,然后原来的工作版本在所有调用中都出现了错误 我使用简单的变体来保存CDO.Message.COM对象 当我使用Send方法(?)时,它返回一个HResult。 但这很有趣,因为HResult对于获取错误代码是不可用的,因为Send似乎是一个真正的方法,它在出现问题时会出现异常。 所以如果我之前设置了这个值,结果代码是-1 我试图用GetLastError获取最后一个错误代码。但这是0 我可以捕获异常,但它只包含以下错误消息: “传输无法连接到服务器” VB代码可以获取错误代码,该错误代码可以提供有关问题的额外信息(或不提供)Delphi 如何获取CDO.Message的错误代码,delphi,error-handling,certificate,transport,cdo.message,Delphi,Error Handling,Certificate,Transport,Cdo.message,我编写了使用CDO.Message的例程。它很久以前就开始工作了。 但是现在,在一些站点上,他们安装了一个证书,然后原来的工作版本在所有调用中都出现了错误 我使用简单的变体来保存CDO.Message.COM对象 当我使用Send方法(?)时,它返回一个HResult。 但这很有趣,因为HResult对于获取错误代码是不可用的,因为Send似乎是一个真正的方法,它在出现问题时会出现异常。 所以如果我之前设置了这个值,结果代码是-1 我试图用GetLastError获取最后一个错误代码。但这是0
您知道从Delphi XE3获取错误代码值的技术吗?如果我们手头有一些源代码就更好了。特别是COM接口的Delphi声明 我猜想该方法被声明为
safecall
。这意味着编译器知道该方法实际上是stdcall
返回HRESULT
,并重新写入要匹配的参数。如果true COM方法返回一个HRESULT
而不是S_OK
,那么编译器将编写代码来检查该错误,并将错误转换为异常
引发的异常将是EOleSysError
,该异常具有属性ErrorCode
,其中包含您正在查找的HRESULT
因此,您需要:
- 添加异常处理程序以捕获
EOleSysError
- 读取捕获的
异常实例的EOleSysError
属性ErrorCode
HRESULT
的truestdcall
方法