将HResult转换为实际的错误代码,Delphi

Mic*_*l T 2 delphi exception

在某个时刻发生EOleSysError,该异常的错误代码是HRESULT.有没有办法可以将HResult转换回错误代码或字符串?

Gol*_*rol 6

HRESULT已经是错误代码.它的含义取决于所做的调用.在COM中,返回HRESULT,因为不允许例外.要解决这个问题,通常会调用OleCheck,它会检查HRESULT,如果它是一个非常值的值,则会引发异常S_OK.这就是你得到的EOleSysError.:)

但请注意,HRESULT已经是错误代码.HRESULT只是一个整数.该名称具有误导性,因为它H表明它是一个句柄,但事实并非如此.

因此,没有比现在更多的信息.HRESULT值与您调用的API文档相结合,可以为您提供所需的所有详细信息.

  • 并且`HRESULT`是一个结构化的价值.它由不同的组件组成.它可以被解码.一些相关文章:http://stackoverflow.com/questions/4597932/how-can-i-is-there-a-way-to-convert-an-hresult-into-a-system-specific-error-me http ://blogs.msdn.com/b/oldnewthing/archive/2006/11/03/942851.aspx的PageIndex = 2 (5认同)
  • 对于那些感兴趣的人,我现在所做的是 SendDebug(IntToStr(HResultCode(EOleSysError(E).ErrorCode))); 这给了我错误 499。结果是一个 CO_E_CLASSSTRING。所以现在我使用: if (E is EOleSysError) and (EOleSysError(E).ErrorCode = CO_E_CLASSSTRING) then ... 就像一个魅力:D (2认同)