Crackkk-GM Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 Witajcie, Dziś wziąłem się za pisanie DLL'ki, dzięki której będzie można napisać grę z użyciem d3d w gm'ie... I mam parę błędów... (taki mały teścik chciałem zrobić czy mi to wyjdzie :P) I podczas kompilacji wyskoczyło parę błędów.... Mógłby je ktoś poprawić?? Będę bardzo wdzięczny :) Oto kod źródłowy: /* D3D4GM.Dll: Direct 3D For GM :) By Crackkk-GM */ #include <d3d9.h> #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE) #define export extern "C" __declspec(dllexport) export double _d3d_start(void) { LPDIRECT3D9 g_pD3D=NULL; LPDIRECT3DDEVICE9 g_pd3dDevice=NULL; if (NULL==(g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL; }; export double _d3d_CreateRenderWindow (double a1,double a2,double a3) { D3DPRESENT_PARAMETERS pp; ZeroMemory(&pp,sizeof(pp)); pp.Windowed = a1; pp.BackBufferWidth = a2; pp.BackBufferHeight = a3; pp.BackBufferFormat = D3DFMT_A8R8G8B8; pp.SwapEffect = D3DSWAPEFFECT_FLIP; if( FAILED( g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &pp, &g_pd3dDevice) ) ) return E_FAIL; }; export double _d3d_RenderWindow (double a1) { g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, a1, 1.0f, 0L ); g_pd3dDevice->BeginScene(); g_pd3dDevice->EndScene(); g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); }; export double _d3d_end(void) { if(g_pd3dDevice!= NULL) g_pd3dDevice->Release(); if(g_pD3D!= NULL) g_pD3D->Release(); }; export double _d3d_PolygonsBuffor(double a1,double a2) { LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; struct CUSTOMVERTEX { FLOAT x, y, z, rhw; //pozycja wierzchołka DWORD color; //kolor wierzchołka }; if(FAILED(g_pd3dDevice->CreateVertexBuffer(a1*sizeof(CUSTOMVERTEX), a2, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL))) { return E_FAIL; } }; export double _d3d_DrawPolygons(double c1,double a1,double a2,double a3,double a4,double a5,double a6,double a7,double a8,double a9,double a10,double a11,double a12) { CUSTOMVERTEX vertices[] = { { a1, a2, a3, a4, c1, }, { a5, a6, a7, a8, c1, }, { a9, a10, a11, a12, c1, }, }; VOID* pVertices; if( FAILED( g_pVB->Lock(0, sizeof(vertices),(void**)&pVertices,0))) return E_FAIL; memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB->Unlock(); } Wiecie, nie śmiejcie się :P
Pentalinio Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 Jak mamy poprawić błędy nie znających ich treści. Poza tym, tylko 3 linijki komentarzy są twoje, nawet nie wiemy (tak jak ty) co ten kod robi :/ .
Will Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 pp.Windowed = a1; Żal... nie masz pojęcia co robisz... a "wklejanie" całego kodu z tekstem "hej znajdzcie mi tu błąd" jest lamerskie.. Najpierw proponuje się nauczyć języka programowania a potem zabrać się za biblioteki graficzne.. Kompilujesz ręcznie? bo jakoś nie chce wierzyć, że nie dostałeś dokładnego komunikatu o błedzie..
Crackkk-GM Opublikowano 24 Marca 2008 Autor Opublikowano 24 Marca 2008 @Misztrzunio: Błędy podam za poł godziny (siorka na kompie :/) Dla kogoś, kto się zna to te kody nie sprawiają trudności... nawet nie wiemy (tak jak ty) co ten kod robi :/ . Może ty nie wiesz...... @Will: pp.Windowed = a1; // to jest "odpowiednik" true = okienko, false = fullscreen, a1 = argument zobacz troszkę wyżej to będziesz wiedzieć o co chodzi ^^
murdalow Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 może lepiej to co jest z dużych liter napisać małymi bo jakieś to dziwne ale to moje odczucie więc sorry
Will Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 export double _d3d_DrawPolygons(double c1,double a1,double a2,double a3,double a4,double a5,double a6,double a7,double a8,double a9,double a10,double a11,double a12) { CUSTOMVERTEX vertices[] = { { a1, a2, a3, a4, c1, }, { a5, a6, a7, a8, c1, }, { a9, a10, a11, a12, c1, }, }; VOID* pVertices; if( FAILED( g_pVB->Lock(0, sizeof(vertices),(void**)&pVertices,0))) return E_FAIL; memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB->Unlock(); } Żal 2... Myślenie nie boli.. fajne argumenty funkcji! Ale myśle , że tu już błąd widzisz.. a co do wyżej to chodziło mi o wartośc double, przypisywanie double do bool? strata pamięci..
Crackkk-GM Opublikowano 24 Marca 2008 Autor Opublikowano 24 Marca 2008 Już poprawiam... Dzięki :P moja pomyłka xd Błędy: C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp In function `double _d3d_CreateRenderWindow(bool, bool, bool)': 23 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `g_pD3D' undeclared (first use this function) (Each undeclared identifier is reported only once for each function it appears in.) 23 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `hWnd' undeclared (first use this function) 23 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `g_pd3dDevice' undeclared (first use this function) C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp In function `double _d3d_RenderWindow(bool)': 28 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `g_pd3dDevice' undeclared (first use this function) C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp In function `double _d3d_end()': 36 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `g_pd3dDevice' undeclared (first use this function) 37 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `g_pD3D' undeclared (first use this function) C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp In function `double _d3d_PolygonsBuffor(double, double)': 49 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `g_pd3dDevice' undeclared (first use this function) C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp In function `double _d3d_DrawPolygons(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)': 56 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `CUSTOMVERTEX' undeclared (first use this function) 56 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp expected `;' before "vertices" 64 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `g_pVB' undeclared (first use this function) 64 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `vertices' undeclared (first use this function) C:\Documents and Settings\Patryk\Pulpit\D3D4GM\Makefile.win [build Error] [dllmain.o] Error 1
Will Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 Żal 3? Masz wszystkie błędy wyświetlone.. i wszytskie ładnie opisane.. gdzie Ty widzisz problem.. undeclared.. export double _d3d_start(void) { LPDIRECT3D9 g_pD3D=NULL; LPDIRECT3DDEVICE9 g_pd3dDevice=NULL; if (NULL==(g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL; }; skoro masz all zdeklarowane w funkcji to jak niby ma to być znane w innych funkcjach? 0.o Nie kopiuj gotowców z jakiś kursów.. pisz sam.. C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp In function `double _d3d_DrawPolygons(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)': żal 4? chodziło o funkcje z przypisywaniem parametru w wyższym poście ^.--
Crackkk-GM Opublikowano 24 Marca 2008 Autor Opublikowano 24 Marca 2008 Zaraz poprawię.... Dam w Edicie inne błędy... @Edit: 24 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `hWnd' undeclared (first use this function) Pffff jak to zdeklarować?
Yoda Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 24 C:\Documents and Settings\Patryk\Pulpit\D3D4GM\dllmain.cpp `hWnd' undeclared (first use this function) Pffff jak to zdeklarować? Jak wszystko inne? Z tego co wiem to uchwyt okna, ale nie pamiętam jakiego typu to było.
Will Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 Żal 5 ;] HWND uchwyt do okna w ,ktorym odbędzie się renderowanie.. zdeklarować bardzo prosto HWND hWnd; ... To, że twój kod jest błędny to jedno.. a to, że jest niepełny i bezsensowny to drugie ;P
Crackkk-GM Opublikowano 24 Marca 2008 Autor Opublikowano 24 Marca 2008 Eee... #include <d3d9.h> Możliwe, że nie mam d3d9.h... (używam Dev-Cpp)
Yoda Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 Ale że w czym teraz problem, nie rozumiem twojego posta.
Will Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 Żal 6... co ma WinAPI do DirectX? jakby chodziło o d3d9 linker wysypał by pełno błędów ^.--
Crackkk-GM Opublikowano 24 Marca 2008 Autor Opublikowano 24 Marca 2008 d3d9.h jest potrzebny do funkcji D3D (tak myślę <_<) A chyba tego nie mam :/ @UP: Jest parę błędów... A jeśli chodzi o Winapi to trzeba na początku kodu dać: #include <windows.h> <_<
Yoda Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 (tak myślę dry.gif) Czyli sam nie wiesz co piszesz? A chyba tego nie mam :/ OMG! Tak trudno sprawdzić? Jak można pisać coś w oparciu o bibliotekę nie wiedząc czy ją sie ma :f @up: nie gadaj.
Crackkk-GM Opublikowano 24 Marca 2008 Autor Opublikowano 24 Marca 2008 A ja tego nie zrobiłem.... :P Nie jestem pewny na 100%, bo jestem jeszcze takim newbie :P
Will Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 sorry Ale Ty nie masz zielonego pojęcia co piszesz.. Weź się za jakiś tutorial najpierw c++ potem jakieś api a na końcu DirectX... Inaczej to się mija z celem kompletnie.... Jeśli dalej chcesz tak programy pisac to żal..
kryniak Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 Eee... #include <d3d9.h> Moßliwe, ße nie mam d3d9.h... (ußywam Dev-Cpp) To przejdz na visual c++ skoro piszesz programy tylko dla windowsa (dev-cpp to kicz). Co do strony: http://gamemakercity.xup.pl/viewtopic.php?p=61 Wróc na forum jak będziesz miał 15 lat.
Konrad-GM Opublikowano 24 Marca 2008 Opublikowano 24 Marca 2008 A jeśli chodzi o Winapi to trzeba na początku kodu dać:#include <windows.h> dry.gif Wcale że nie... nie wiem czy wiesz, ale "d3d9.h" ma już implementację "windows.h" i na początku jest zbędne ( co najmniej u mnie tak jest )
Solmis Opublikowano 25 Marca 2008 Opublikowano 25 Marca 2008 @Crackkk-GM: Po pierwsze primo: Nie bierz się za takie rzeczy, skoro ich nie rozumiesz... Po drugie secundo: Zaczyna się od tutoriala/tutoriali... :< :confused:
Crackkk-GM Opublikowano 25 Marca 2008 Autor Opublikowano 25 Marca 2008 @UP: Dzięki za dobre rady, ale nigdzie nie ma kursu na pisanie DLL z użyciem DirectX... @topic: Zamykam, poprawie sam :P
Rekomendowane odpowiedzi