не может запросить IDirect3D7 из IDirectDraw7 в Win10 - PullRequest
0 голосов
/ 20 января 2020

Я пробую следующий код hr = ddr7-> QueryInterface (IID_IDirect3D7, (void **) & d3d7), возвращаемый hr - E_NOINTERFACE, как это происходит? большое спасибо !!!

1 Ответ

0 голосов
/ 23 января 2020

В моей Windows 10 версии системы 1909 (18363) [x64] это работало нормально:

#define INITGUID
#include <windows.h>
#include <stdio.h>
#include <ddraw.h>
#include <d3d.h>

typedef HRESULT ( WINAPI* LPDIRECTDRAWCREATEEX )( GUID FAR * lpGuid, LPVOID  *lplpDD, REFIID  iid,IUnknown FAR *pUnkOuter );

void main()
{
    HINSTANCE hInstDDraw = nullptr;
    LPDIRECTDRAW pDDraw = nullptr;

    hInstDDraw = LoadLibraryW( L"ddraw.dll" );
    if( hInstDDraw )
    {
        auto pDDCreate = reinterpret_cast<LPDIRECTDRAWCREATEEX>(GetProcAddress( hInstDDraw, "DirectDrawCreateEx" ) );
        if (pDDCreate)
        {
            HRESULT hr = pDDCreate(nullptr, reinterpret_cast<LPVOID*>(&pDDraw), IID_IDirectDraw7, nullptr);
            if (SUCCEEDED(hr))
            {
                LPDIRECT3D7 d3d7 = nullptr;
                hr = pDDraw->QueryInterface(IID_IDirect3D7, reinterpret_cast<LPVOID*>(&d3d7));
                if (SUCCEEDED(hr))
                {
                    printf("Worked\n");
                    return;
                }
                else
                {
                    printf("QI Failed: %08X\n", static_cast<int>(hr));
                }
            }
            else
            {
                printf("DDCreate Failed: %08X\n", static_cast<int>(hr));
            }
        }

        FreeLibrary( hInstDDraw );
    }

    printf("Failed\n");
}

Вы должны убедиться, что HRESULT от вашего звонка до DirectDrawCreateEx работал. Кроме того, возможно, это может быть проблема с вашими драйверами или настройкой.

Ваш первоначальный вопрос действительно должен включать в себя больше кода, в частности DirectDrawCreateEx, поскольку только QueryInterface не особенно информативен.

...