Меню Рубрики

Createdevice failed if you are running windows 7

Проблема с CreateDevice

Изучаю DirectX9 , один из примеров странно работает.
Использую directX sdk june 2010 .
На одном из ПК после запуска возникает ошибка:
https://s.mail.ru/3Eux/5B5sDx1cP

Почему-то в pDirect3DDevice нулевой указатель и девайс не создается: «pDirect3DDevice was nullptr.».
Единственное что нашел — включить debug в DirectX, но его включить невозможно, причину найти не смог: https://s.mail.ru/4FaL/JkNGwguwp .
Подскажите, пожалуйста, в чем возникает проблема и как её исправить.
Код:

#include
#include
#include
#include
#pragma comment (lib, «d3d9.lib»)
#pragma comment( lib, «d3dx9.lib» )
#pragma comment(lib, «Winmm.lib»)

LPDIRECT3DVERTEXBUFFER9 pBufferVershin = NULL;
LPDIRECT3DINDEXBUFFER9 pBufferIndex = NULL;
LPDIRECT3D9 pDirect3D = NULL;
LPDIRECT3DDEVICE9 pDirect3DDevice = NULL;

struct CUSTOMVERTEX
<
float X, Y, Z;
DWORD color;
static const DWORD CustomVertex = D3DFVF_XYZ | D3DFVF_DIFFUSE;
>;

HRESULT IntialDirect3D(HWND hWnd)
<
if (NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)));
return E_FAIL;
D3DDISPLAYMODE Display;
if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))
return E_FAIL;
D3DPRESENT_PARAMETERS Direct3DParametr;
ZeroMemory(&Direct3DParametr, sizeof(Direct3DParametr));
Direct3DParametr.Windowed = true;
Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;
Direct3DParametr.hDeviceWindow = hWnd;
Direct3DParametr.BackBufferFormat = Display.Format;
if (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &Direct3DParametr, &pDirect3DDevice)))
return E_FAIL;
pDirect3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
//pDirect3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); Ниже есть комент в ф-ии InitialObject
pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &Direct3DParametr, &pDirect3DDevice);
return S_OK;
>

HRESULT InitialObject()
<
/*D3DXMATRIX projection;
D3DXMatrixPerspectiveFovLH(&projection, D3DXToRadian(60), 1, 1, 1000);//
pDirect3DDevice->SetTransform(D3DTS_PROJECTION, &projection);

const unsigned short Index[] =
<
0,1,2, 2,3,0,
4,5,6, 6,7,4,
8,9,10, 10,11,8,
12,13,14, 14,15,12,
16,17,18, 18,19,16,
20,21,22, 22,23,20,
>;

if (FAILED(pDirect3DDevice->CreateVertexBuffer(36*sizeof(Vershin), NULL, CUSTOMVERTEX::CustomVertex, D3DPOOL_DEFAULT, &pBufferVershin, NULL)))
return E_FAIL;

VOID* pBV;
if (FAILED(pBufferVershin->Lock(NULL, NULL, (void**)&pBV, NULL)))
return E_FAIL;
memcpy(pBV, Vershin, sizeof(Vershin));
pBufferVershin->Unlock();
pDirect3DDevice->CreateIndexBuffer(36 * sizeof(Index), NULL, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &pBufferIndex, NULL);
VOID* pBI;
pBufferIndex->Lock(NULL, sizeof(Index), (void**)&pBI, NULL);
memcpy(pBI, Index, sizeof(Index));
pBufferIndex->Unlock();
return S_OK;
>

VOID Matrix()
<
D3DXMATRIX MatrixWorld; //мировая
D3DXMATRIX MatrixViev; //вида
D3DXMATRIX MatrixProjection; //проекции
//MatrixWorld
UINT Time = timeGetTime() % 5000;
FLOAT Angle = Time * (2.0f*D3DX_PI) / 5000.0f;
D3DXMatrixRotationX(&MatrixWorld, Angle); //Вращение
pDirect3DDevice->SetTransform(D3DTS_WORLD, &MatrixWorld);
//MatrixViev
D3DXMatrixLookAtLH(&MatrixViev, &D3DXVECTOR3(0.0f, 0.0f, -8.0f), &D3DXVECTOR3(0.0f, 0.0f, 0.0f), &D3DXVECTOR3(0.0f, 1.0f, -8.0f));
pDirect3DDevice->SetTransform(D3DTS_VIEW, &MatrixViev);
// MatrixProjection
D3DXMatrixPerspectiveFovLH(&MatrixProjection, D3DX_PI / 4, 1.0f, 1.0f, 100.0f);
pDirect3DDevice->SetTransform(D3DTS_PROJECTION, &MatrixProjection);
>

VOID RenderingDirect3D()
<
/*static int r = 0;
r++;
if (r > 255)
r = 0;*/

pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), NULL, NULL);
pDirect3DDevice->BeginScene();
// здесь происходит прорисовка сцены
Matrix();
pDirect3DDevice->SetIndices(pBufferIndex);
pDirect3DDevice->SetFVF(CUSTOMVERTEX::CustomVertex);
pDirect3DDevice->SetStreamSource(NULL, pBufferVershin, NULL, sizeof(CUSTOMVERTEX));
pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
//
pDirect3DDevice -> EndScene();
pDirect3DDevice -> Present(NULL, NULL, NULL, NULL);
>

VOID DeleteDirect3D()
<
if (pDirect3DDevice != NULL)
pDirect3DDevice->Release();
if (pDirect3D != NULL)
pDirect3D->Release();
if (pBufferVershin != NULL)
pBufferVershin->Release();
>

LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
<
switch (uMsg)
<
case WM_PAINT:
RenderingDirect3D();
ValidateRect(hWnd, NULL);
return(0);
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_DESTROY:
DeleteDirect3D();
PostQuitMessage(0);
return (0);
>
return DefWindowProc(hWnd, uMsg, wParam, lParam);
>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
<
WNDCLASSEX wc; // WNDCLASSEX — структура
ZeroMemory(&wc, sizeof(wc)); // чтобы не заполнять все параметры , заполняется все нулями. ZeroMemory — функция
HWND hWnd;
MSG uMsg;

wc.cbSize = sizeof(WNDCLASSEX); // cbSize — размер структуры
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_PEN);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = L»MainWindow»;
wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;

RegisterClassEx(&wc);
hWnd = CreateWindow(wc.lpszClassName, L»Create window», WS_OVERLAPPEDWINDOW, 100, 100, 720, 480, NULL, NULL, hInstance, NULL);

ShowWindow(hWnd, SW_SHOWDEFAULT);
IntialDirect3D(hWnd);
UpdateWindow(hWnd);

В функции HRESULT IntialDirect3D(HWND hWnd) поставил проверку и действительно она возвращает E_FAIL .

Источник

Различные ошибки DirectX

Ошибка DirectX – далеко не редкое явление. Эти библиотеки весьма чувствительны к драйверам, настройкам операционной системы и прочим штукам. Поэтому сбои случаются довольно часто. И нужно знать все о том, как им противостоять. Рассмотрим самые популярные ситуации.

Устранение неполадок

В данном материале мы рассмотрим те сбои ДиректХ, которые встречаются чаще всего в повседневной жизни. Естественно, мы расскажем и о том, как их исправить. Но в тексте будет много сложного. Так что внимательно читайте инструкции.

DirectX function device CreateTexture2D

Если появляется ошибка «DirectX function device CreateTexture2D», то, вероятнее всего, виноваты драйвера видеокарты. Бывает так, что в старых драйверах не хватает куска кода, который требуется для нормальной работы видеокарты с той или иной версией библиотеки. Это случается из-за недосмотра разработчиков. Однако в новых версиях ПО ошибка может быть устранена.

Для обновления драйвера вовсе не обязательно посещать официальный сайт разработчика, скачивать нужную версию драйвера и устанавливать ее вручную. Гораздо проще и безопаснее использовать для обновления инструменты Windows.

Сейчас мы рассмотрим вариант обновления с помощью «Диспетчера устройств» Windows:

  1. Щелкаем по кнопке «Пуск» правой кнопкой мыши и дожидаемся появления контекстного меню.
  2. В меню ищем «Диспетчер устройств» и нажимаем на этот пункт.
  3. Появится окно со списком установленного оборудования. Ищем «Видеоадаптеры» и щелкаем по данной записи.
  4. Находим имя своей видеокарты и щелкаем по нему правой кнопкой мыши.
  5. В контекстном меню выбираем «Обновить драйвер».
  6. Запустится мастер обновления. Необходимо щелкнуть по кнопке «Автоматический поиск драйверов в сети».

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

Unable to create DirectX 11 device

А вот ошибка «Unable to create DirectX 11 device», наоборот, может появиться после обновления драйвера, если в его коде есть какой-то баг. Если это сбой обнаружился только после обновления, то это значит, что в новой версии ПО присутствует какой-то баг, мешающий нормальной работе графического адаптера и системных библиотек.

Откат также осуществляется при помощи встроенных инструментов операционной системы Windows. Но для его осуществления требуются немного другие шаги, чем для обновления драйвера. Впрочем, мы в любом случае предоставим подробную инструкцию, рассказывающую о данном процессе. Вот она:

  1. Опять переходим раздел «Видеоадаптеры» в «Диспетчере задач».
  2. Теперь необходимо найти имя нашей графической карты и кликнуть по ней правой кнопкой мыши.
  3. В появившемся меню просто выбираем «Свойства».
  4. Перемещаемся на вкладку «Драйвер».
  5. Нажимаем на кнопку «Откатить».
  6. Подтверждаем действие путем нажатия на кнопку «ОК».

Как водится, после работы с драйверами обязательно нужно перезагрузить компьютер. Иначе система просто не увидит другой драйвер и попытается работать со старым, что приведет к падению ОС. После рестарта можно проверять игру на наличие ошибок. Если и этот вариант не помог, то у нас в запасе есть еще несколько.

The Launcher cannot query DirectX

Весьма часто в окошке с ошибкой появляется текст The Launcher cannot query DirectX в L.A Noire. Что делать в этом случае? Вероятнее всего, на компьютере хозяйничают вирусы. Именно из-за них может получиться такой казус. И это еще не предел. Огромное количество вирусов на компьютере вполне может повесить всю ОС. Так что стоит воспользоваться каким-либо антивирусом, чтобы проверить компьютер

Еще одно решение – обновление компонента Microsoft .NET Framework до версии 4.7.1:

  1. Откройте эту ссылку.
  2. Кликните по кнопке «Скачать».
  3. Дождитесь завершения загрузки.
  4. Теперь запустите полученный файл.
  5. Выполните инсталляцию компонента.

DirectX function device createbuffer

Для появления ошибки «DirectX function device createbuffer» тоже имеется свое объяснение. Если на вашем компьютере находились полчища вирусов, то вполне вероятно, что они могли повредить некоторые системные файлы, ответственные за работу библиотек DirectX. Отсюда и постоянные ошибки при запуске той или иной игрушки. Также могут возникнуть конфликты в работе драйверов и компонентов библиотек.

Однако даже если файлы сильно повреждены, есть возможность вернуть все на круги своя. Для восстановления элементов даже не нужно никаких дополнительных программ. Достаточно командной строки. Бояться ее не стоит. Если все выполнять в строгом соответствии с инструкцией, то ничего страшного не случится. А вот и она:

  1. Открываем меню «Пуск» при помощи соответствующей кнопки в панели задач.
  2. Далее щелкаем по папке «Служебные».
  3. Находим пункт «Командная строка» и кликаем по нему правой кнопкой мыши.
  4. Появится меню, в котором нужно выбрать опцию «Запуск от имени администратора».
  5. В главном окне консоли вводим sfc /scannow и жмем на кнопку Enter.

Проверка файлов и их восстановление займет около 10-15 минут. Не забудьте, что после окончания проверки обязательно нужно будет перезагрузить компьютер. Иначе в восстановлении не будет никакого толку. После рестарта можно проверять работоспособность библиотек DirectX и любимой игрушки. Если это не помогло, то остается всего один вариант.

Не удается создать устройство DirectX

Если «Не удается создать устройство DirectX», то такое поведение может быть также связано с работой антивируса или системного брандмауэра. Эти программы любят блокировать все подряд. Даже несмотря на то, что перед ними вовсе не вредоносный объект. Вероятно, они блокируют и некоторые компоненты библиотек Директ Икс.

Самым правильным шагом будет временное отключение защиты. Достаточно это сделать для антивируса. Просто найдите его иконку в трее Windows, кликните по ней ПКМ и выберите соответствующую опцию.

DirectX encountered an unrecoverable error

При появлении ошибки с текстом «DirectX encountered an unrecoverable error» остается только одно – переустановка. Ведь, вероятнее всего, вирусы повредили какие-то файлы самих библиотек. Поэтому и появляются ошибки такого типа. И именно поэтому видеокарта не может нормально работать с DirectX. Если это действительно так, то приятного в этом мало.

Здесь поможет только полная переустановка компонента. Данная процедура очень простая в исполнении, ведь от пользователя требуется просто скачать и запустить специальную утилиту. Подробности о ней изложены в отдельной статье, с которой мы и предлагаем вам ознакомиться. Это же действие нередко спасает и при сбое DirectX error 0x887a0004.

Your graphics card does not support DirectX 11 features

Некоторые ошибки указывают на аппаратную проблему. Да, именно на ту, которая связана с железом компьютера. И здесь мы вряд ли что-нибудь сможем сделать.

Ошибка с текстом Your graphics card does not support DirectX 11 features недвусмысленно говорит о том, что у вас слишком древний графический адаптер, который не поддерживает DirectX 11. И такое действительно случается. Под раздачу даже попадают видеокарты 2011 года выпуска. И неудивительно. Ведь они поддерживают только версию 10.1.

Решение проблемы простое. Нужно пойти в магазин и купить новую видеокарту. Есть еще один вариант: отказаться от идеи запуска той игры, которая выдала такую ошибку. Все равно ничего не получится до тех пор, пока вы не обновите свое оборудование. Эту ошибку исправить невозможно другими способами.

Заключение

В рамках данного материала мы поговорили о том, что делать, если вдруг возникла неустранимая ошибка DirectX. Если именно так написано в окне с ошибкой, то это еще ничего не значит. В большинстве случаев ее можно устранить. Если, конечно, она имеет программный характер, а не связана с аппаратными частями компьютера.

Для решения программных проблем существует много способов. Все они перечислены чуть выше. Некоторые из них могут показаться вам довольно сложными. Но не стоит паниковать. Нужно выполнять все в строгом соответствии с инструкцией. Только в этом случае можно надеяться, что проблема будет решена и библиотеки заработают так, как им положено. Кстати, если вы поняли, что проблема имеет аппаратный характер, то не пытайтесь ремонтировать видеокарту сами. Вы ее только убьете.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Create device failed if you are running windows 7
  • Crash dump синий экран windows 7 x64 что делать
  • Crash bandicoot не запускается на windows 8
  • Crack для windows 10 pro лицензионный ключ
  • Couldn t load xpcom при запуске firefox windows 7