Что такое 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
)
);

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

6

Решение

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

9

Другие решения

Других решений пока нет …