Всем привет.. Начал изучение DirectX, Написал программу, которая приведена в книге "Михаила Фленова: DirectX и C++, искоство программирования", вроде бы всё правильно, но компилятор выдаёт 4 ошибки, и не показывает где, (т.е. F4 не показывает строку с ошибкой). Кстате пишу в программе Visual Studio 6.0
Вот исходный код:
| Код | //Файл dxfunc.h
#ifndef _DXFUNC_H_ #define _DXFUNC_H_ #include "d3d9.h" #include "d3dx9.h"
HRESULT DX3DInit(IDirect3D9 **ppiD3D9, IDirect3DDevice9 **ppiDDevice9, HWND hWnd, DWORD iWidth, DWORD iHeight, BOOL bFullScreen); #endif
|
| Код | //Файл dxfunc.cpp
#include "dxfunc.h" // Функция инициализации Direct3D HRESULT DX3DInit(IDirect3D9 **ppiD3D9, IDirect3DDevice9 **ppiD3DDevice9, HWND hWnd, DWORD iWidth, DWORD iHeight, BOOL bFullScreen) { // Инициализация if((*ppiD3D9 = Direct3DCreate9(D3D_SDK_VERSION)) == NULL) return E_FAIL;
// Заполняем основные параметры представления D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferWidth = iWidth; d3dpp.BackBufferHeight = iHeight;
// Запрос на отображение в полноэкранном режиме int iRes; if (!bFullScreen) iRes=MessageBox(hWnd, "Use fullscreen mode?", "Screen", MB_YESNO | MB_ICONQUESTION); else iRes = IDYES;
if(iRes == IDYES) { ////////////////////////////////////////////////////////// // Полноэкранный режим ////////////////////////////////////////////////////////// // Установка параметров полноэкранного режима d3dpp.BackBufferFormat = D3DFMT_R5G6B5; d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP; d3dpp.Windowed = FALSE; d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; } else { ////////////////////////////////////////////////////////// // Оконный режим ////////////////////////////////////////////////////////// RECT wndRect; RECT clientRect; GetWindowRect(hWnd, &wndRect); GetClientRect(hWnd, &clientRect);
iWidth = iWidth + (wndRect.right-wndRect.left) - (clientRect.right-clientRect.left); iHeight = iHeight + (wndRect.bottom-wndRect.top) - (clientRect.bottom-clientRect.top);
MoveWindow(hWnd, wndRect.left, wndRect.top, iWidth, iHeight, TRUE);
// Получить формат пикселя D3DDISPLAYMODE d3ddm; (*ppiD3D9)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
// Установка параметров d3dpp.BackBufferFormat = d3ddm.Format; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.Windowed = TRUE; } DWORD Flags= D3DCREATE_MIXED_VERTEXPROCESSING;
// Создать 3D устройство HRESULT hRes; if(FAILED(hRes = (*ppiD3D9)->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, Flags, &d3dpp, ppiD3DDevice9))) return hRes;
// Установить перспективу float Aspect = (float)d3dpp.BackBufferWidth / (float)d3dpp.BackBufferHeight; D3DXMATRIX matProjection; D3DXMatrixPerspectiveFovLH(&matProjection, D3DX_PI/4.0f, Aspect, 0.1f, 2000.0f); (*ppiD3DDevice9)->SetTransform(D3DTS_PROJECTION, &matProjection);
(*ppiD3DDevice9)->SetRenderState(D3DRS_LIGHTING, FALSE);
return S_OK; }
HRESULT DX3DInitZ(IDirect3D9 **ppiD3D9, IDirect3DDevice9 **ppiD3DDevice9, HWND hWnd, DWORD iWidth, DWORD iHeight, BOOL bFullScreen) { // Инициализация if((*ppiD3D9 = Direct3DCreate9(D3D_SDK_VERSION)) == NULL) return E_FAIL;
// Заполняем основные параметры представления D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferWidth = iWidth; d3dpp.BackBufferHeight = iHeight; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; d3dpp.EnableAutoDepthStencil = TRUE; // Запрос на отображение в полноэкранном режиме int iRes; if (!bFullScreen) iRes=MessageBox(hWnd, "Use fullscreen mode?", "Screen", MB_YESNO | MB_ICONQUESTION); else iRes = IDYES;
if(iRes == IDYES) { ////////////////////////////////////////////////////////// // Полноэкранный режим ////////////////////////////////////////////////////////// // Установка параметров полноэкранного режима d3dpp.BackBufferFormat = D3DFMT_R5G6B5; d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP; d3dpp.Windowed = FALSE; d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; } else { ////////////////////////////////////////////////////////// // Оконный режим ////////////////////////////////////////////////////////// RECT wndRect; RECT clientRect; GetWindowRect(hWnd, &wndRect); GetClientRect(hWnd, &clientRect);
iWidth = iWidth + (wndRect.right-wndRect.left) - (clientRect.right-clientRect.left); iHeight = iHeight + (wndRect.bottom-wndRect.top) - (clientRect.bottom-clientRect.top);
MoveWindow(hWnd, wndRect.left, wndRect.top, iWidth, iHeight, TRUE);
// Получить формат пикселя D3DDISPLAYMODE d3ddm; (*ppiD3D9)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
// Установка параметров d3dpp.BackBufferFormat = d3ddm.Format; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.Windowed = TRUE; } DWORD Flags= D3DCREATE_MIXED_VERTEXPROCESSING;
// Создать 3D устройство HRESULT hRes; if(FAILED(hRes = (*ppiD3D9)->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, Flags, &d3dpp, ppiD3DDevice9))) return hRes;
// Установить перспективу float Aspect = (float)d3dpp.BackBufferWidth / (float)d3dpp.BackBufferHeight; D3DXMATRIX matProjection; D3DXMatrixPerspectiveFovLH(&matProjection, D3DX_PI/4.0f, Aspect, 2.0f, 1000.0f); (*ppiD3DDevice9)->SetTransform(D3DTS_PROJECTION, &matProjection);
(*ppiD3DDevice9)->SetRenderState(D3DRS_LIGHTING, FALSE);
return S_OK; }
|
А вот что выдаёт компилятор:
| Цитата | --------------------Configuration: First - Win32 Debug-------------------- Compiling... dxfunc.cpp Linking... dxfunc.obj : error LNK2001: unresolved external symbol _D3DXMatrixPerspectiveFovLH@20 dxfunc.obj : error LNK2001: unresolved external symbol _Direct3DCreate9@4 LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 Debug/First.exe : fatal error LNK1120: 3 unresolved externals Error executing link.exe.
First.exe - 4 error(s), 0 warning(s)
|
|