ссылка на неразрешенный внешний символ (directx)

  • Автор темы nyawkooo
  • Дата начала
N

nyawkooo

Гость
#1
Всем привет. MVS 2008 Pro Edition (rus), при компиляции кода, выдает ошибку: error LNK2019: ссылка на неразрешенный внешний символ _Direct3DCreate9@4 в функции _WinMain@16. Подскажите, пожалуйста, что нетак :(

C++:
#include <windows.h>
#include <d3d9.h>

LRESULT __stdcall WndProc(HWND, UINT, WPARAM, LPARAM);

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wc;
wc.style = CS_OWNDC;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)(6);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpszClassName = L"class";
wc.lpszMenuName = NULL;

RegisterClass(&wc);

HWND hWnd = CreateWindow(L"class",L"Инициализация Direct3D",
WS_OVERLAPPEDWINDOW,200,100,
500,500,NULL,NULL,hInstance,NULL);

ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);

IDirect3D9* d3d = NULL;	 
IDirect3DDevice9* dev = NULL;

d3d = Direct3DCreate9(D3D_SDK_VERSION);

D3DPRESENT_PARAMETERS pp;
ZeroMemory(&pp,sizeof(pp));

pp.BackBufferWidth = 500;
pp.BackBufferHeight = 500;
pp.BackBufferFormat = D3DFMT_X8R8G8B8;
pp.BackBufferCount = 1;
pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
pp.hDeviceWindow = hWnd;
pp.Windowed = true;

d3d->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_REF,hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&pp, &dev);
MSG msg;
while (1)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}

dev->Clear(0,NULL,D3DCLEAR_TARGET,
D3DCOLOR_XRGB(255,255,255),1.0f,0);

dev->BeginScene();
dev->EndScene();

dev->Present(NULL,NULL,NULL,NULL);
}

if (dev != NULL)
dev->Release();
if (d3d != NULL)
d3d->Release();
return 0;
}

LRESULT __stdcall WndProc (HWND hWnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
 
N

nyawkooo

Гость
#3
DirectX SDK установлен (June 2010), инклуды и либы подключил.
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#4
В коде вроде все верно.. Скинь сообщения об ошибках полностью, все что пишет компилятор.
 
N

nyawkooo

Гость
#5
Ошибка 1: error LNK2019: ссылка на неразрешенный внешний символ _Direct3DCreate9@4 в функции _WinMain@16 ; файл: main.obj
Ошибка 2: fatal error LNK1120: 1 неразрешенных внешних элементов
 
N

nyawkooo

Гость
#6
Попробовал скачать с офф сайта MVS 2008 Express, выдает ту же ошибку :facepalm: :
1>main.obj : error LNK2019: unresolved external symbol _Direct3DCreate9@4 referenced in function _WinMain@16
1>D:\Data\dx\test\Debug\test.exe : fatal error LNK1120: 1 unresolved externals

Надеюсь это чем-нибудь поможет:
Попробовал в Character Set поставить Multi-Byte Character Set, теперь выдает:

1>d:\data\dx\test\test\main.cpp(19) : error C2440: '=' : cannot convert from 'const wchar_t [6]' to 'LPCSTR'; в этой строчке в кода: wc.lpszClassName = L"class";

1>d:\data\dx\test\test\main.cpp(26) : error C2664: 'CreateWindowExA' : cannot convert parameter 2 from 'const wchar_t [6]' to 'LPCSTR' ; в этой строчке кода: 500,500,NULL,NULL,hInstance,NULL);
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#7
Надеюсь это чем-нибудь поможет:
Попробовал в Character Set поставить Multi-Byte Character Set, теперь выдает:
Не поможет. Поменяй обратно.

Библиотеку не находит. Проверяй. У тебя d3d9.lib не подключается (90%).

Добавлено: Попробуй в самое начало кода (перед #include <windows.h>) поставить #pragma comment(lib, "d3d9.lib")