Ĺadny brzuch
Witam!
Mam pewien problem. Kompiluje program oparty o Direct'a X w kompilatorze Dev C++. SDK Direct'a jaki używam to wersja z 2008 roku. Wszystkie pliki nagłówkowe i .lib załączyłem do projektu, ale podczas kompilacji wyskakują mi błąd:
C:\Users\"nazwa użytkownika"\Desktop\DirectX_test\Makefile.win [Build Error] [Projekt1.exe] Error 1
Zamieszczam także kod programu:
/dołączenie plików nagłówkowych #include <d3d9.h> #include<time.h> #include<windows.h> #include <ddraw.h> //tytuł app #define APPTITLE "DirectX_test " //obiekty Directx LPDIRECT3D9 d3d = NULL; LPDIRECT3DDEVICE9 d3ddev = NULL; //funkcja game_init int Game_Init(HWND hwnd) { //wyświetlanie wiadomości o zainicjowaniu funkcji MessageBox(hwnd,"Program zaczyna działanie","Game_Init",MB_OK); //inicjacaja Direct3D d3d=Direct3DCreate9(D3D_SDK_VERSION); if(d3d==NULL) { MessageBox(hwnd,"Błąd w trakcie inicjacji Direct3D","Błąd",MB_OK); return 0; } //ustawienie parametrów Direct3D D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed=TRUE; d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat=D3DFMT_UNKNOWN; //stworzenie urządzenia Direct3D d3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev); if(d3ddev==NULL) { MessageBox(hwnd,"Błąd w trakcie tworzenia urządzenia Direct3D","Błąd",MB_OK); return 0; } srand(time(NULL)); return 1; } //funkcja game_run void Game_Run(HWND hwnd) { if(d3ddev==NULL) return; //Wyczyszczenie bufora zielonym kolorem d3ddev->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,255,255),1.0f,0); //początek renderowania if (d3ddev->BeginScene()) { //miejsce na przyszłe instrukcje //przerwanie renderingu d3ddev->Present(NULL,NULL,NULL,NULL); } } //funkcja game_end void Game_End(HWND hwnd) { //wyświetlenie wiadomości o zamknięciu okna MessageBox(hwnd,"Program kończy swoje działanie","Game_End",MB_OK); //zwolnienie urządzenia Direct3D if (d3ddev!=NULL) d3ddev->Release(); //zwolnienie pamięci zajmowanej przez obiekt Direct3D if(d3d!=NULL) d3d->Release(); } LRESULT WINAPI WinProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch ( msg) { case WM_DESTROY: Game_End(hWnd); PostQuitMessage(0); return 0; } return DefWindowProc( hWnd, msg , wParam , lParam); } //ustawienie parameetrów niezbednych do utworzenia okna aplikacji ATOM MyRegisterClass(HINSTANCE hInstance) { //utworzenie struktury klasy okna WNDCLASSEX wc; wc.cbSize= sizeof (WNDCLASSEX); wc.style= CS_HREDRAW|CS_VREDRAW; wc.lpfnWndProc= (WNDPROC) WinProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = APPTITLE; wc.hIconSm = NULL; //ustawienie okna razem z info return RegisterClassEx(&wc); } //punkt wejściowy programu czyli Windowsowa funkcja MAIN int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; //rejestracja klasy okna za pomocą funkcji MyRegisterClass(hInstance); HWND hWnd; //utworzenie okna hWnd = CreateWindow( APPTITLE, APPTITLE, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, NULL, hInstance, NULL); //kod obsługujący błąd w trakcie tworzenia okna if(!hWnd) return FALSE; //wyświetl okno ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); //inicjacja procedury game if(!Game_Init(hWnd)) return 0; //główna pętla wiadomości int done=0; while(!done) { if(PeekMessage(&msg, NULL,0,0,PM_REMOVE)) { //sprawdzanie czy została otrzymana wiadomość o zamknięci programu if(msg.message==WM_QUIT) { MessageBox(hWnd,"Otrzymano wiadomość o zamknięciu aplikacji","WinMain",MB_OK); done=1; } //dekodowanie wiadomości i przekazanie jej to WndProc TranslateMessage(&msg); DispatchMessage(&msg); } else Game_Run(hWnd); } return msg.wParam; }
O co chodzi z tym błędem i czym jest on spowodowany: C:\Users\"nazwa użytkownika"\Desktop\DirectX_test\Makefile.win [Build Error] [Projekt1.exe] Error 1 Jak go usunąć?? Za pomoc z góry dziękuje.
Użytkownik grafikb edytował ten post 01 styczeń 2009, 18:57
Problem polega na tym, że biblioteki DirectX dla Visual Studio i podobnych (rozszerzenie .lib), nie są zgodne z kompilatorami gcc, g++, etc. (z nich korzysta Dev-Cpp). Podaje tu link do pliku (rozszerzenie .a), który może rozwiązać problem. W menu Projekt->Opcje projektu, a następnie w polu Konsolidator dodajemy tylko libd3d9.a. Powinno pomóc :).
Dzięki zadziałało. Ale mam inny problem, bo dodałem funkcje, która ustawia kamerę oraz wczytuje i wyświetla obiekt z pliku .x, ale gdy skompilowałem to kompilator zaczął przyczepiać się d typów danych takich jak LPDIRECT3D9 i mówi mi, że to nie jest niezadeklarowany indetyfikator. Co jest nie tak?
Użytkownik grafikb edytował ten post 03 styczeń 2009, 19:45
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam pewien problem. Kompiluje program oparty o Direct'a X w kompilatorze Dev C++. SDK Direct'a jaki używam to wersja z 2008 roku. Wszystkie pliki nagłówkowe i .lib załączyłem do projektu, ale podczas kompilacji wyskakują mi błąd:
C:\Users\"nazwa użytkownika"\Desktop\DirectX_test\Makefile.win [Build Error] [Projekt1.exe] Error 1
Zamieszczam także kod programu:
/dołączenie plików nagłówkowych #include <d3d9.h> #include<time.h> #include<windows.h> #include <ddraw.h> //tytuł app #define APPTITLE "DirectX_test " //obiekty Directx LPDIRECT3D9 d3d = NULL; LPDIRECT3DDEVICE9 d3ddev = NULL; //funkcja game_init int Game_Init(HWND hwnd) { //wyświetlanie wiadomości o zainicjowaniu funkcji MessageBox(hwnd,"Program zaczyna działanie","Game_Init",MB_OK); //inicjacaja Direct3D d3d=Direct3DCreate9(D3D_SDK_VERSION); if(d3d==NULL) { MessageBox(hwnd,"Błąd w trakcie inicjacji Direct3D","Błąd",MB_OK); return 0; } //ustawienie parametrów Direct3D D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed=TRUE; d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat=D3DFMT_UNKNOWN; //stworzenie urządzenia Direct3D d3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev); if(d3ddev==NULL) { MessageBox(hwnd,"Błąd w trakcie tworzenia urządzenia Direct3D","Błąd",MB_OK); return 0; } srand(time(NULL)); return 1; } //funkcja game_run void Game_Run(HWND hwnd) { if(d3ddev==NULL) return; //Wyczyszczenie bufora zielonym kolorem d3ddev->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,255,255),1.0f,0); //początek renderowania if (d3ddev->BeginScene()) { //miejsce na przyszłe instrukcje //przerwanie renderingu d3ddev->Present(NULL,NULL,NULL,NULL); } } //funkcja game_end void Game_End(HWND hwnd) { //wyświetlenie wiadomości o zamknięciu okna MessageBox(hwnd,"Program kończy swoje działanie","Game_End",MB_OK); //zwolnienie urządzenia Direct3D if (d3ddev!=NULL) d3ddev->Release(); //zwolnienie pamięci zajmowanej przez obiekt Direct3D if(d3d!=NULL) d3d->Release(); } LRESULT WINAPI WinProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch ( msg) { case WM_DESTROY: Game_End(hWnd); PostQuitMessage(0); return 0; } return DefWindowProc( hWnd, msg , wParam , lParam); } //ustawienie parameetrów niezbednych do utworzenia okna aplikacji ATOM MyRegisterClass(HINSTANCE hInstance) { //utworzenie struktury klasy okna WNDCLASSEX wc; wc.cbSize= sizeof (WNDCLASSEX); wc.style= CS_HREDRAW|CS_VREDRAW; wc.lpfnWndProc= (WNDPROC) WinProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = APPTITLE; wc.hIconSm = NULL; //ustawienie okna razem z info return RegisterClassEx(&wc); } //punkt wejściowy programu czyli Windowsowa funkcja MAIN int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; //rejestracja klasy okna za pomocą funkcji MyRegisterClass(hInstance); HWND hWnd; //utworzenie okna hWnd = CreateWindow( APPTITLE, APPTITLE, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, NULL, hInstance, NULL); //kod obsługujący błąd w trakcie tworzenia okna if(!hWnd) return FALSE; //wyświetl okno ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); //inicjacja procedury game if(!Game_Init(hWnd)) return 0; //główna pętla wiadomości int done=0; while(!done) { if(PeekMessage(&msg, NULL,0,0,PM_REMOVE)) { //sprawdzanie czy została otrzymana wiadomość o zamknięci programu if(msg.message==WM_QUIT) { MessageBox(hWnd,"Otrzymano wiadomość o zamknięciu aplikacji","WinMain",MB_OK); done=1; } //dekodowanie wiadomości i przekazanie jej to WndProc TranslateMessage(&msg); DispatchMessage(&msg); } else Game_Run(hWnd); } return msg.wParam; }
O co chodzi z tym błędem i czym jest on spowodowany: C:\Users\"nazwa użytkownika"\Desktop\DirectX_test\Makefile.win [Build Error] [Projekt1.exe] Error 1 Jak go usunąć?? Za pomoc z góry dziękuje.
Użytkownik grafikb edytował ten post 01 styczeń 2009, 18:57
Problem polega na tym, że biblioteki DirectX dla Visual Studio i podobnych (rozszerzenie .lib), nie są zgodne z kompilatorami gcc, g++, etc. (z nich korzysta Dev-Cpp). Podaje tu link do pliku (rozszerzenie .a), który może rozwiązać problem. W menu Projekt->Opcje projektu, a następnie w polu Konsolidator dodajemy tylko libd3d9.a. Powinno pomóc :).
Dzięki zadziałało. Ale mam inny problem, bo dodałem funkcje, która ustawia kamerę oraz wczytuje i wyświetla obiekt z pliku .x, ale gdy skompilowałem to kompilator zaczął przyczepiać się d typów danych takich jak LPDIRECT3D9 i mówi mi, że to nie jest niezadeklarowany indetyfikator. Co jest nie tak?
Użytkownik grafikb edytował ten post 03 styczeń 2009, 19:45