DX::ThrowIfFailed是什么?

10

最近我一直在重新学习C++。我已经离开C++/CLI,转而使用C#至少一年了,现在有点生疏了。我正在查看Windows 8的Direct3D应用程序的基本示例,但找不到任何解释

 DX::ThrowIfFailed

根据所述,如果DirectX中的某些内容出现问题,它将执行某些操作,但从实现来看,它似乎被用于初始化基础设施作为Direct3D演示的基础:

    Platform::String^ text = "Hello, DirectX!";

DX::ThrowIfFailed(
    m_dwriteFactory->CreateTextLayout(
        message->Data(),
        message->Length(),
        m_textFormat.Get(),
        700, // maxWidth.
        1000, // maxHeight.
        &m_textLayout
        )
    );

有人能解释一下这个函数是如何工作的吗?我在示例中看到它散落在各处,但无论如何搜索都没有找到正确的文档。提前感谢您!


这不是C++/CLI,而是C++/CX。语法非常相似,但意义却有很大不同。 - James McNellis
1个回答

11

此函数将失败的HRESULTs转换为异常。它在DirectXHelper.h中定义,该文件是Direct3D应用程序模板的一部分:

这个函数会把 失败的HRESULT 转成 异常(Exception)抛出来。它在 DirectXHelper.h 文件中定义,该文件是 Direct3D 应用程序模板的一部分。

inline void ThrowIfFailed(HRESULT hr)
{
    if (FAILED(hr))
    {
        // Set a breakpoint on this line to catch Win32 API errors.
        throw Platform::Exception::CreateException(hr);
    }
}

如果您正在使用 Visual Studio,则可以右键单击代码中的任何 ThrowIfFailed 实例,并选择“转到定义”。这将打开包含定义的文件并导航到其位置。

有关此辅助程序的更多信息,请参见GitHub


1
由于某种原因,我以为这是Direct3D的一部分。下次在询问之前,我会确保查看所有定义。非常感谢! - Serguei Fedorov
即使它是Direct3D的一部分,它也必须是在一个包含的头文件或引用的Windows元数据文件中;在任何情况下,Go To Definition都应该能够找到定义。 - James McNellis
@JamesMcNellis 我知道这个帖子有点老了,但如果我没有 DirectXHelper.h 怎么办?(Windows 8.1 64位 MSVC 2013) - Quest
@Quest,Windows SDK示例中有这个头文件。你可以在这里找到它们:链接 - Chris Guzak
DIrect3D Win32游戏模板中也有一个简单的实现。 - Chuck Walbourn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接