Konfiguracja Visual-a 2008 i DirectX 9 SDK

0

Jak skonfigurować to piekielne narzędzie bo dostaje następujące błędy pomimo tego ze wzkazalem mu directories, includes oraz liblaries w tools/options? W opcjach konkretnego projektu w linker input aditional dependiences wpisalem: dxerr9.lib dxguid.lib d3dx9d.lib d3d9.lib dinput8.lib winmm.lib comctl32.lib

\winmain.cpp(5) : error C2146: syntax error : missing ';' before identifier 'D3D'
\winmain.cpp(5) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
\winmain.cpp(5) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
\winmain.cpp(6) : error C2146: syntax error : missing ';' before identifier 'D3Dd'
\winmain.cpp(6) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
\winmain.cpp(6) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

#include <d3d9.h> // if you are using DX9
#include <d3dx9.h>

DIRECT3D9 D3D = NULL;
DIRECT3DDEVICE9 D3Dd = NULL;
//#ifndef WINMAIN_CPP
//#define WINMAIN_CPP
//
//#include "WinMain.h"
//
//FMOD_SYSTEM *syst;
//
//      FMOD_RESULT error;
//      FMOD_SOUND *sound;
//      FMOD_CHANNEL *channel;
//      DWORD dgetvalue, dsetvalue;
//CApplication Application;

Prosze pomożcie bo juz wariuje, od rana nad tym siedze.:(

0
Zimi82 napisał(a)

DIRECT3D9 D3D = NULL;
DIRECT3DDEVICE9 D3Dd = NULL;

//wiesz mi, że lepiej jest nie robić nazw zmiennych samymi dużymi literami
LPDIRECT3D9 d3d = NULL;
LPDIRECT3DDEVICE9 d3d_dev = NULL;

a ja to w ogóle nie lubię tych piekielnych typdefów, czy makr (nie pamiętam jak jest zdefiniowane LPDIRECT3D*), dlatego piszę:

IDirect3D9* dx = NULL;
IDirect3DDevice9* device= NULL;
0

Super!!!!! Dzięki jesteś BOSKI!

//wiesz mi, że lepiej jest nie robić nazw zmiennych samymi dużymi literami
LPDIRECT3D9 d3d = NULL;
LPDIRECT3DDEVICE9 d3d_dev = NULL;

a ja to w ogóle nie lubię tych piekielnych typdefów, czy makr (nie pamiętam jak jest zdefiniowane LPDIRECT3D*), dlatego piszę:
IDirect3D9* dx = NULL;
IDirect3DDevice9* device= NULL;

Czym to się różni od tej pierwszej definicji ? Rozumiem ze to IDirect... to wskaznik na interfejs DirectX
Czy ten pierwszy sposób to tez wskaznik z racji tego ze w nazwie jest LP...(long pointer) , to d2d bez gwiazdki mnie zastanawia.

0
Zimi82 napisał(a)

Czym to się różni od tej pierwszej definicji ? Rozumiem ze to IDirect... to wskaznik na interfejs DirectX

tak pointer na utworzony obiekt COM, który posiada interfejs (metody do wywoływania), który dostajesz do dyspozycji w programie jako wskaźnik

Czy ten pierwszy sposób to też wskaznik z racji tego ze w nazwie jest LP...(long pointer) , to d2d bez gwiazdki mnie zastanawia.

hmm, wpiszmy LPDIRECT3D9, prawym na to i "Go To Definition", co my tu mamy w pliku d3d9.h:

typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;

jednak typedef, a stawiałbym na makro, cóż panowi z M$ zrobili postęp od czasów WinAPI, już nie używają makr :D

a tak serio to, jest to po prostu te LPDIRECT'y to jak widzisz zdefiniowane nazwy wskaźników na interfejsy, czyli to co napisałem drugim razem,
widzisz panowie z M$ zakładają, że osoby które będą używać tego SDK to kretyni i jak zobaczą gwiazdkę to poprzewraca im się w głowach, więc podefiniowali takie zasrane nazwy, żeby nie trzeba było tych gwiazdek pisać, ot cała tajemnica
ja to się nigdy nie [CIACH!] w takie zabawy z nazwami i walę opcję drugą, od razu widać co jest co, czyż nie?

0
_crayze napisał(a)
typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;

jednak typedef, a stawiałbym na makro, cóż panowi z M$ zrobili postęp od czasów WinAPI, już nie używają makr :D

W nagłówkach WINAPI masz identyczne konstrukcje...

0

nie, no śmieje się aby, nic do panów z M$ nie mam i do ich kodu, zrobili nawet nie najgorszy system, no to sobie teraz nagrabiłem u antywindosowców xd

0

ja to się nigdy nie {hm} w takie zabawy z nazwami i walę opcję drugą, od razu widać co jest co, czyż nie?

w malym programie, ktory ogarniasz w pamieci - tak.
ale gdy roznych **, ****, ****&, ***** zaczyna sie robic kilka w jednej linijce kodu, docenisz typedef'y :)

0

typedefy doceniam i to nawet bardzo...
chodzi mi tu tylko o ten przypadek z d3d, typedefowanie IDirect3D...* to bardzo niepotrzebny zabieg, lekko mówiąc...

poza tym nie do końca zgodzę się z typedef'owaniem wskaźników, ja akurat (nie wiem, może i jestem inny) lubię widzieć jakie obecnie mam zagnieżdżenie wskaźników (ile jest tych kochanych gwiazdeczek)...

natomiast typedef'y prędzej mi przydają się przy jakiś długich długich nazwach z szablonowymi konstrukcjami, bo przykładowo pisanie 'const std::list<JakasNazwaKlasy>::iterator' zajmuje z 1/3 szerokości w kontrolce z kodem w IDE, a tako idzie krótszy typedef na to i jest spokój, już nie mówiąc o konstrukcjach typu 'std::list<std::jakis_kontener<NazwaKlaski>>::iterator', tu już obowiązkowo typedef musi iść, także wierz mi, że doceniam typedef'y, nawet w niedużych projektach (takich na 12 nagłówków i ze 6 *.cpp)

0
_crayze napisał(a)

poza tym nie do końca zgodzę się z typedef'owaniem wskaźników, ja akurat (nie wiem, może i jestem inny) lubię widzieć jakie obecnie mam zagnieżdżenie wskaźników (ile jest tych kochanych gwiazdeczek)...

wiesz, ja tez;) dla mnie, int** jest tak samo wiele mowiacy jak PPINT, PPPPPPINT tak samo nieprzejrzysty jak int******.. ale niektorzy dostaja drgawek widzac juz dwie gwiazdki.
poza tym, trzeba brac pod uwage, ze typ argumenow funkcji z interfejsu API jest/musi byc troche bardziej hm uniwersalny niz tylko dla c/c++. nazywajac wszystkie kolejne pochodne po drodze identyfikatorami daje sie mozliwosc stosowania tych samych identyfikatorow w innych jezykach/platformach.. podejrzewam ze to tez byl jeden z powodow takiego a nie innego podejscia

1 użytkowników online, w tym zalogowanych: 0, gości: 1