8

我最近又回到了 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
        )
    );

有人可以向我解释这个功能是如何工作的。我看到它分散在示例中,但没有多少谷歌搜索可以减轻适当的文档。提前谢谢你!

4

1 回答 1

10

此函数将失败的 HRESULT 转换为异常。它是在 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

于 2012-11-27T20:16:35.463 回答