我编写了使用CDO.Message的例程。这是很久以前的工作。 但现在,在某些网站上,他们安装了证书,然后之前工作的版本在所有呼叫中都出错。
我使用简单的变体来保存CDO.Message COM对象。
当我使用Send方法(?)时,它返回一个HResult。 但它很有意思,因为HResult无法获取错误代码,因为Send似乎是一个真正的方法,可以解决问题。 因此,如果我之前设置为此值,则结果代码为-1。
我试图用GetLastError获取最后一个错误代码。但这是0。
我可以捕获异常,但它只包含错误消息:
“传输无法连接到服务器”
VB代码可以获取错误代码,该错误代码可以提供有关问题的额外信息(或不提供)。
您是否知道从Delphi XE3获取错误代码值的技术?
答案 0 :(得分:1)
如果我们手头有一些源代码会更好。特别是COM接口的Delphi声明。
我的猜测是该方法被声明为safecall
。这意味着编译器理解该方法实际上是stdcall
返回HRESULT
,并重写参数以匹配。如果真正的COM方法返回HRESULT
而不是S_OK
,那么编译器会编写代码来检查它并将错误转换为异常。
引发的异常将为EOleSysError
,并且其属性ErrorCode
包含您要查找的HRESULT
。
所以,你需要:
EOleSysError
。ErrorCode
异常实例的EOleSysError
属性。这一切都在房子周围。如果您更愿意避免异常处理,那么您始终可以重新编写COM接口声明,使其成为返回stdcall
的真HRESULT
方法。