Ich möchte einen zeiger auf einer klasse als ein Paramether einer Methode setzen. Wenn ich diese methode dann ausführe, bekomme ich aber ein paar Runtime Errors.
Meine Fentser Klasse ist flgendermaßen deklariert:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
class FORGEWINDOW
{
public:
FORGEWINDOW() { }
~FORGEWINDOW() { }
HWND hWindow;
D3DPRESENT_PARAMETERS d3dpp;
FORGERESULT Create(char* szName, int iWidth, int iHeight, char* szTyp, bool bFuulscreen);
FORGERESULT Show();
};
|
Und meine Scenen Klasse so:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
class FORGESCENE
{
public:
FORGESCENE() { }
~FORGESCENE() { }
LPDIRECT3D9 d3d;
LPDIRECT3DDEVICE9 d3ddev;
FORGERESULT CreateDevice(FORGEWINDOW *forgeWindow);
};
|
In meiner Hauptdatei, deklariere ich die Objekte folgendermaßen:
|
C-/C++-Quelltext
|
1
2
|
FORGEWINDOW FWINDOW;
FORGESCENE FSCENE;
|
Die CreateDevice() Methode meiner Scenen Klasse sieht nun so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
FORGERESULT FORGESCENE::CreateDevice(FORGEWINDOW *forgeWindow)
{
FORGERESULT FRESULT;
d3d->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
forgeWindow->hWindow,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&forgeWindow->d3dpp,
&d3ddev);
FRESULT.szCode = "C101";
FRESULT.szResult = "OK";
return FRESULT;
}
|
Wenn ich nun diese Methode aufrufen willerstelle ich erst die fenster Klasse, beziehungsweise benutze si erst damit die variablen in der Klasse gesetzt werden:
|
C-/C++-Quelltext
|
1
2
3
|
FRESULT = FWINDOW.Create("RealForge Demo", 800, 600, "Changeable", true);
FRESULT = FWINDOW.Show();
FRESULT = FSCENE.CreateDevice(&FWINDOW);
|
Nun it das Provlem, das ich ganz viele Runtime errors bekomme, diese hier sind besonders betroffen, beziehungsweise sind in rot:
+ forgeWindow 0x0041a19c class RealForge::FORGEWINDOW FWINDOW {hWindow=0x0029097c d3dpp={...} } RealForge::FORGEWINDOW *
+ forgeWindow->hWindow 0x0029097c {unused=4587520 } HWND__ *
Diese tauchen in der CreateDevice methode auf. Ich verstehe nicht warum diese hWindow angeblich nicht benutzt sein sollte, in FWINDOW.Create() werden diese gesetzt ...