none
HResultの値 RRS feed

  • 質問

  • UnauthorizedAccessException例外発生した時にHResultが-2147024891値でした。
    http://ir9.jp/prog/ayu/win32err.htmのERROR_ACCESS_DENIEDで値5ですが
    この二つをどうやって比較できますでしょうか。
    ex.HResult値を何か変換して5で比較できるみたいですが私はできない状況です。

    Luky9

    2019年7月10日 2:21

回答

  • ご返信ありがとうございます。

    Catch ex As UnauthorizedAccessException When CInt((ex.HResult And &HFFFF)) = 5 で解説できました。


    Luky9

    • 回答としてマーク Luky9 2019年7月10日 2:58
    2019年7月10日 2:58

すべての返信

  • Windows SDKのwinerror.hには

    #define __HRESULT_FROM_WIN32(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)))
    

    のように定義されています。実際、-2147024891は16進表記で0x80070005であり、ERROR_ACCESS_DENIED(5)を表していることがわかります。Visual Basicでも同様に変換すればいいかと。

    2019年7月10日 2:48
  • ご返信ありがとうございます。

    Catch ex As UnauthorizedAccessException When CInt((ex.HResult And &HFFFF)) = 5 で解説できました。


    Luky9

    • 回答としてマーク Luky9 2019年7月10日 2:58
    2019年7月10日 2:58
  • この質問は HRESULT の成り立ちを知りたかったということで合っていますか?そうであれば、特に問題ないと思います。

    もし、実際のコードでこのように書こうとされている場合はちょっともやっとするので...。

    この例外クラスは HRESULT 固定 であるので違う値のことはほぼなく、when を書いても意味がなさそうに見えるため。

    https://referencesource.microsoft.com/#mscorlib/system/unauthorizedaccessexception.cs,94e3cb4b7b7d78be

    2019年7月10日 3:16
    モデレータ