Mam problem z bibliotekami DirectX'a. Ściągnąłem sobie najnowszą wersję (czerwiec 2008) zestawu startowego DirectX dla programistów C++ i C#( DirectX SDK). Otóż gdy wg. załączonego tutoriala chcę odpalić samo środowisko 3D, to linker mi protestuje. Załączam wyfiltrowany kod(po co tutaj api, jeśli działa :-P ):
// Szablon aplikacji okienkowej Win32 z użyciem DirectX 3D v9.0.
// Kod źródłowy utworzony na :
// Visual C++ 2008 Express Edition, v9.0.21022.8 RTM
// Wymagany jest DirectX SDK 2008 do działania kodu źródłowego
// #include ...
#include <d3d9.h>
// Zmienne globalne ---------------------------------------------
//...
LPDIRECT3D9 g_pD3D = NULL ;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL ;
// Deklaracje zapowiedziane -------------------------------------
//...
void Render( void ) ;
void ReleaseD3D( void ) ;
// --------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
...
// Inicjalizacja trybu 3D w głównym oknie aplikacji --------
if( NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)) ) //tego tyczy się błąd linkera
// a jestem pewien, że wersje się zgadzają!!!
{
MessageBox( NULL, _T("Nie wykryto bibliotek DirectX w wersji 9.0 lub nowszej!")
_T("\nPonowne zainstalowanie DirectX powinno rozwiązać problem."),
szTitle, MB_OK | MB_ICONERROR ) ;
return E_FAIL ;
}
D3DPRESENT_PARAMETERS d3dpp ;
ZeroMemory( &d3dpp, sizeof(d3dpp) ) ;
d3dpp.Windowed = TRUE ;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD ;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN ;
if( FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice)) )
{
MessageBox( NULL, _T("Utworzenie środowiska DirectX 3D nie powiodło się!"),
szTitle, MB_OK | MB_ICONERROR ) ;
return E_FAIL ;
}
...
}
// -------------------------------------------------------------
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps ;
HDC hdc;
switch ( message )
{
case WM_PAINT:
hdc = BeginPaint( hWnd, &ps ) ;
Render( ) ; // DirectX - funkcja renderująca
EndPaint( hWnd, &ps ) ;
break ;
case WM_DESTROY:
ReleaseD3D( ) ; // DirectX - funkcja zwalniająca obiekty
PostQuitMessage( 0 ) ;
break ;
default :
return DefWindowProc( hWnd, message, wParam, lParam ) ;
break ;
}
return 0;
}
// -------------------------------------------------------------
void Render( void )
{
// Czyszczenie buforu pozaekranowego
g_pd3dDevice -> Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 ) ;
// Rysowanie sceny
g_pd3dDevice -> BeginScene( ) ;
// Rendering umieść tutaj
g_pd3dDevice -> EndScene( ) ;
}
// -------------------------------------------------------------
void ReleaseD3D( void )
{
if( g_pd3dDevice != NULL ) g_pd3dDevice->Release( ) ;
if( g_pD3D != NULL ) g_pD3D->Release( ) ;
}
// -------------------------------------------------------------
Dokładny opis błędu: linker error LNK2019: unresolved external variable in function Direct3DCreate9...
Gdy klikam dwukrotnie na zapis, to nie ukazuje mi się plik z błędem :|
Dodatkowa informacja: projekty DirectX SDK zostały utworzone dla visual C++ 2005. Być może vc2008 ma jeszcze jakieś bugi albo DirectX SDK. Szukałem tego wszędzie, ale nic konkretnego.