Функции Direct3D 9 возвращают значение

Поскольку возвращаемое функцией значение используется для сообщения об ошибке, как функции возвращают необходимую информацию вызывающей стороне?

Например: IDirect3D9::CreateDevice метод


person zzz    schedule 01.07.2013    source источник
comment
можете указать пример? (ссылка msdn подойдет)   -  person Mgetz    schedule 01.07.2013


Ответы (1)


Итак, если вы взглянете на эту ссылку, вы заметите, что она имеет некоторые параметры, помеченные Out, это важно, потому что это обозначает, что будет возвращено вызывающей стороне.

HRESULT CreateDevice(
[in]           UINT Adapter,
[in]           D3DDEVTYPE DeviceType,
[in]           HWND hFocusWindow,
[in]           DWORD BehaviorFlags,
[in, out]      D3DPRESENT_PARAMETERS *pPresentationParameters,
[out, retval]  IDirect3DDevice9 **ppReturnedDeviceInterface
);

В приведенном выше примере (скопированном и вставленном из ссылки MSDN) вы заметите, что параметр ppReturnedDeviceInterface помечен как ** или указатель на указатель, вызывающий передаст адрес своего указателя и будет возвращен указатель по этому адресу. Также структура D3DPRESENT_PARAMETERS, переданная в pPresentationParameters, будет обновлена ​​по возвращении, как указано в аннотации out. Бывший:

IDirect3DDevice9 *pDevice = NULL;

HRESULT hr = pD3D->CreateDevice(
                     D3DADAPTER_DEFAULT,
                     D3DDEVTYPE_HAL,
                     hwnd,
                     pPresentationParams,
                     &pDevice);
 if(SUCCEEDED(hr))
 {
    //pDevice should be non null at this point
 }
person Mgetz    schedule 01.07.2013
comment
Итак, вызывающий объект — CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, pPresentationParams, &pDevice); в то время как значение возвращается через D3DPRESENT_PARAMETERS *pPresentationParameters. Я прав? - person zzz; 01.07.2013
comment
На самом деле возвращаются два значения: D3DPRESENT_PARAMETERS обновляется (на что указывает пометка out), а pDevice присваивается указатель на IDirect3DDevice9. Все это, конечно, предполагает, что возвращаемое значение функции равно S_OK, если нет... все ставки сняты. - person Mgetz; 01.07.2013
comment
@zzz остерегайтесь терминов возвращаемое значение и выходные параметры. - person zdd; 17.07.2013
comment
@zdd Правильно, чтобы сделать его более запутанным, Microsoft использует аннотацию для объявления возвращаемого значения в параметрах, которое является фактическим возвращаемым значением, не нарушая требований к подписи функции COM. - person Mgetz; 17.07.2013