【问题标题】:Create COMException from HRESULT从 HRESULT 创建 COMException
【发布时间】:2012-03-19 17:48:17
【问题描述】:

如何在给定 HRESULT 的情况下创建 COMException?

我有 P/Invoke:ed 一个返回 HRESULT 的 win32 方法。
如果它返回失败,我希望抛出一个带有标准错误文本的 COMException。
我该怎么做?

  1. throw new COMException(null, hResult)

  2. COMException e = new COMException;
    e.HResult = hResult;
    throw e;

或者我应该使用其他方法吗?

【问题讨论】:

    标签: c# com


    【解决方案1】:

    如果你只想获取异常,你应该使用Marshal.GetExceptionForHR(),如果也想抛出它,你应该使用Marshal.ThrowExceptionForHR()

    【讨论】:

      【解决方案2】:

      我会在您的DllImport 通话中查看PreserveSig 字段。这将为函数返回的任何非 S_OK HRESULT 生成异常。

      【讨论】:

      • 会让函数返回例如S_FALSE扔?这会很奇怪,但可能比无法将其与 S_OK 区分开来要好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多