Что такое DX:: ThrowIfFailed?

в последнее время я возвращаюсь в C++. Я был вдали от C++/CLI, используя C# вместо этого, по крайней мере, год, и я немного ржавый. Я смотрю на базовый пример для приложения Direct3D для Windows 8 и не могу найти ничего, что объясняет, что

 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
        )
    );

может кто-нибудь объяснить мне, как эта функция работает. Я вижу, что это scattared accross примеры, но никакое количество googling не облегчило надлежащую документацию. Спасибо заранее!

1 ответов


эта функция переводит HRESULTs сбоя в исключения. Это определено так, в 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 в коде и выберите " Перейти к определению."Это откроет файл, который содержит определение и перейдите к его местоположению.