CreateDevice завершается ошибкой с D3DERR_INVALIDCALL - PullRequest
0 голосов
/ 16 апреля 2020

Этот код представляет собой DLL, предназначенную для внедрения. Функция создает D3D9Device, однако я всегда получаю сообщение об ошибке с ошибкой. Я проверил все, и рядом с строкой, в которой есть проблемы, есть комментарий.

Если вам нужна дополнительная информация, оставьте комментарий заранее.

bool GetD3D9Device(void ** ptable, size_t size)
{

    if (!ptable)
    {
       return false;
    }
    g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);

    if (!g_pD3D)
    {
        return false;
    }

    D3DPRESENT_PARAMETERS d3dpp = {};
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow = GetProcessWindow();
    d3dpp.Windowed = false;
    HRESULT Err = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3dpp.hDeviceWindow, 
    D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice); // this call gives the error

    if (!g_pd3dDevice)
    {
        if (Err == D3DERR_DEVICELOST)
        {
            MessageBoxA(0, "err device lost", "AOC", MB_OK);
        } 
        else if (Err == D3DERR_INVALIDCALL)
        {
            MessageBoxA(0, "err invalid call", "AOC", MB_OK);
        }
        else if (Err == D3DERR_NOTAVAILABLE)
        {
            MessageBoxA(0, "err Not available", "AOC", MB_OK);
        }
        else if (Err == D3DERR_OUTOFVIDEOMEMORY)
        {
            MessageBoxA(0, "err out of mem", "AOC", MB_OK);
        }
         MessageBoxA(0, "device not valid", "AOC", MB_OK);
         g_pd3dDevice->Release();
         return false;
    }

    memcpy(ptable, *reinterpret_cast<void***>(g_pd3dDevice), size);
    g_pd3dDevice->Release();
    g_pD3D->Release();
    return true;
}
...