Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

GR-PA

Treue Seele

  • »GR-PA« ist der Autor dieses Themas

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

1

08.07.2007, 17:07

Problem mit CreateDevice

Hi, ich habe folgendes kleines Problem:
In meinem Programm zum initalisieren von DirectX schlägt die Funktion Create Device fehl und ich weiß nicht, woran das liegen könnte. Hier der komplette Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <d3dx9.h>
#include <dxerr9.h>
#include <d3d9.h>
#include <Windows.h> 
#include <DSound.h>
#include <DInput.h>



PDIRECT3D9 g_pD3D;
PDIRECT3DDEVICE9 g_pD3DDevice;


void ExitD3D()
{
 
 g_pD3D->Release();
 g_pD3DDevice->Release();
}

void InitD3D (HWND hWnd)
{
 D3DPRESENT_PARAMETERS  P_Parms;
 HRESULT hResult;
 

 g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
 
 ZeroMemory(&P_Parms, sizeof(D3DPRESENT_PARAMETERS));
 P_Parms.BackBufferWidth                    =1024;
 P_Parms.BackBufferHeight                   =768;
 P_Parms.BackBufferFormat                   =D3DFMT_A8R8G8B8;
 P_Parms.BackBufferCount                    =1;
 P_Parms.MultiSampleType                    =D3DMULTISAMPLE_NONE,
 P_Parms.MultiSampleQuality                 =0;
 P_Parms.SwapEffect                         =D3DSWAPEFFECT_COPY;
 P_Parms.hDeviceWindow                      =hWnd;
 P_Parms.Windowed                           =TRUE;
 P_Parms.EnableAutoDepthStencil             =TRUE;
 P_Parms.AutoDepthStencilFormat             =D3DFMT_D24S8;
 P_Parms.Flags                              =0;
 P_Parms.FullScreen_RefreshRateInHz         =120;
 P_Parms.PresentationInterval               =D3DPRESENT_INTERVAL_DEFAULT;
 
 hResult = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
                                D3DDEVTYPE_HAL,
                                hWnd,
                                D3DCREATE_HARDWARE_VERTEXPROCESSING,
                                &P_Parms,
                                &g_pD3DDevice);
 if(FAILED(hResult))
 {
  MessageBox(NULL, TEXT("Fehler beim generieren der Schnittstelle"), TEXT("Fehler"), 0);
  ExitD3D(); 
 }
 else
 {
  MessageBox(NULL, TEXT("Erfolgreice Erstellung der Schnittstelle"), TEXT("Erfolg"),0);
 }

}




LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("") ;
     HWND         hWnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;

      hWnd = CreateWindow (szAppName,                 // Name der Fensterklasse

                  TEXT (""),                          // Fenstertitel

                  WS_OVERLAPPEDWINDOW,                // Fensterstil

                  CW_USEDEFAULT,                      // X-Position des Fensters

                  CW_USEDEFAULT,                      // Y-Position des Fensters

                  CW_USEDEFAULT,                      // Fensterbreite

                  CW_USEDEFAULT,                      // Fensterhöhe

                  NULL,                               // übergeordnetes Fenster

                  NULL,                               // Menü

                  hInstance,                          // Programm-Kopiezähler (Programm-ID)

                  NULL) ;                             // zusätzliche Parameter

     
     ShowWindow (hWnd, iCmdShow) ;
     UpdateWindow (hWnd) ;
     InitD3D(hWnd);

     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     HDC         hdc ;
     PAINTSTRUCT ps ;
     RECT        rect ;
     
     switch (message)
     {
     case WM_PAINT:
          hdc = BeginPaint (hWnd, &ps);         
          EndPaint (hWnd, &ps) ;
          return 0 ;
          
     case WM_DESTROY:
          PostQuitMessage (0) ;
          ExitD3D();
          return 0 ;
     }
     return DefWindowProc (hWnd, message, wParam, lParam) ;
}

Ich habe alles gelinkt was möglich ist. Daran kann es nicht liegen.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

08.07.2007, 18:37

Der Rückgabewert ist gleichzeitig ein Fehlercode(eine Zahl), die dir sagt, was falsch gelaufen ist. Schau sie dir mal an und vergleich sie mit den Fehlercodes, die bei der Doku für die Methode als mögliche Fehlercodes aufgelistet sind.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

08.07.2007, 19:12

C-/C++-Quelltext

1
P_Parms.BackBufferFormat                   =D3DFMT_A8R8G8B8;


da könnte z.b. der fehler liegen. schau mal nach ob deine grafikkarte überhaupt unterstützt was du einstellen willst ;)

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

4

08.07.2007, 20:37

Es gibt auch ein dx error lookup tool.

Gib da ma ldie fehlermeldung ein.
Aso den fehlercode den createdev. zurückgibt.

Socke

eas

Frischling

  • Private Nachricht senden

5

09.07.2007, 10:06

Hallo,

Du übergibst ein ungültiges Fensterhandle, da du vor dem Erzeugen deines Fensters, das Registrieren der Fensterklasse vergessen hast.

Quellcode

1
2
3
4
if (!RegisterClass(&wndclass)) 
{
     // Fehlerbehandlung
}


Vielleicht solltest du in der Funktion InitD3D überprüfen, ob hWnd != NULL ist.
Dann solltest du szAppName[] nicht mit einem Leerstring initialisieren.

Ausserdem solltest du

Quellcode

1
P_Parms.FullScreen_RefreshRateInHz = 0; 
setzen. In der Doku steht:

Zitat

For windowed mode, the refresh rate must be 0.

GR-PA

Treue Seele

  • »GR-PA« ist der Autor dieses Themas

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

6

09.07.2007, 12:37

Problem gelöst!!!!!!!!!! FREU FERU!!!!! :D :D
und das ging so:
1. szAppName auf "irgendeinenText"
2. RegisterClass aufrufen, was ich vergessen habe
3. Bildwiderholfrequenz auf 0 setzen (wegen Fenstermodus)
und schon lief alles perfekt! :D 8)
Danke für die Hilfe

7

09.07.2007, 21:34

Erstaunlich, dass der Code da oben funzt.

Das heißt doch LPDIRECT3D9! ;)
Sprachen: C/C++, C#, Assembler (16-Bit), QuickBASIC

Progater

Treue Seele

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

8

09.07.2007, 23:02

Es gibt einmal LPDIRECT3D9 (long Pointer) und PDIRECT3D9. Ist eigentlich dasselbe ;)
Beide Versionen werden unterstützt.
To go back to the drawing board is not everyone's cup of tea! :-)

GR-PA

Treue Seele

  • »GR-PA« ist der Autor dieses Themas

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

9

10.07.2007, 08:30

Außer bei direct Sound und Direct Input. Hier gibt es nur die Versionen mit LP. :D

10

10.07.2007, 17:47

Zitat von »"GR-PA"«

Außer bei direct Sound und Direct Input.


Typisch MS! :D
Sprachen: C/C++, C#, Assembler (16-Bit), QuickBASIC

Werbeanzeige