Вопрос В чем ошибка ? Почему нарушение доступа для чтение в D3D9_DEVICE

MONKEY
Пользователь
Статус
Оффлайн
Регистрация
22 Мар 2019
Сообщения
206
Реакции[?]
36
Поинты[?]
0
C++:
void render()
{
    D3D9_DEVICE->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0, 0, 0, 0), 1, 0);
    D3D9_DEVICE->BeginScene();

    POINT cursor;
    GetCursorPos(&cursor);
    Line(0, 0, cursor.x, cursor.y, 3, true, D3DCOLOR_ARGB(255, 255, 0, 255));

    D3D9_DEVICE->EndScene();
    D3D9_DEVICE->Present(nullptr, nullptr, nullptr, nullptr);
}
Сама ошибка:

Вызвано исключение: нарушение доступа для чтения.
**D3D9_DEVICE** было nullptr.

Вызвано необработанное исключение: нарушение доступа для чтения.
**D3D9_DEVICE** было nullptr.
 
MONKEY
Пользователь
Статус
Оффлайн
Регистрация
22 Мар 2019
Сообщения
206
Реакции[?]
36
Поинты[?]
0
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Прежде чем использовать DirectX устройство его нужно создать, убедись что вызываешь функци инициализации, и что там верные параметры и устройство действительно создается.
 
MONKEY
Пользователь
Статус
Оффлайн
Регистрация
22 Мар 2019
Сообщения
206
Реакции[?]
36
Поинты[?]
0
Прежде чем использовать DirectX устройство его нужно создать, убедись что вызываешь функци инициализации, и что там верные параметры и устройство действительно создается.
C++:
void initD3D(HWND hWnd)
{
    LPDIRECT3D9 d3d = Direct3DCreate9(D3D_SDK_VERSION);

    //if (NULL == (d3d = Direct3DCreate9(D3D_SDK_VERSION)))
    //{
    //    return exit(1);
    //}

    D3DPRESENT_PARAMETERS d3dpp;

    ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETERS));
    d3dpp.Windowed = TRUE;
    d3dpp.hDeviceWindow = hWnd;
    d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    d3dpp.BackBufferWidth = SCREEN_WIDTH;
    d3dpp.BackBufferHeight = SCREEN_HEIGHT;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;


    d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, nullptr, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &D3D9_DEVICE);
    D3DXCreateFont(D3D9_DEVICE, 16, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &TEXT_FONT);
}
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
void initD3D(HWND hWnd)
{
    LPDIRECT3D9 d3d = Direct3DCreate9(D3D_SDK_VERSION);

    //if (NULL == (d3d = Direct3DCreate9(D3D_SDK_VERSION)))
    //{
    //    return exit(1);
    //}

    D3DPRESENT_PARAMETERS d3dpp;

    ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETERS));
    d3dpp.Windowed = TRUE;
    d3dpp.hDeviceWindow = hWnd;
    d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    d3dpp.BackBufferWidth = SCREEN_WIDTH;
    d3dpp.BackBufferHeight = SCREEN_HEIGHT;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;


    d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, nullptr, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &D3D9_DEVICE);
    D3DXCreateFont(D3D9_DEVICE, 16, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &TEXT_FONT);
}
Нужно еще хукнуть функцию, Present или EndScene
Там где будешь рисовать.
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Что пытаешься сделать?
Рисовать в своем приложении или в чужом?
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Нужно еще хукнуть функцию, Present или EndScene
Если у него крашит в функции отрисовки логично что он уже это сделал.
Тем не менее в инициализации тс не проверят абсолютно ничего, создалось ли d3d9, создалось ли устройство, создался ли шрифт.
 
MONKEY
Пользователь
Статус
Оффлайн
Регистрация
22 Мар 2019
Сообщения
206
Реакции[?]
36
Поинты[?]
0
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу