什么是DX :: ThrowIfFailed?

时间:2012-11-27 20:13:06

标签: c++ visual-c++ c++-cx

我最近又回到了C ++。我已经使用C#远离C ++ / CLI至少一年了,而且我有点生疏了。我正在查看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
        )
    );

有人可以向我解释这个功能是如何运作的。我看到它散落在各个例子中,但谷歌搜索量没有减少适当的文档。提前谢谢!

1 个答案:

答案 0 :(得分:9)

此函数将失败的HRESULT转换为异常。它的定义如下,在DirectXHelper.h中,它是Direct3D App模板的一部分:

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的任何实例,然后选择"转到定义。"这将打开包含定义的文件并导航到其位置。