PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Error bei CreateDevice??


TheGamer
2003-07-01, 19:13:19
Hey,

ich habe folgenden Code


LPDIRECT3D9 g_lpD3D = NULL;
LPDIRECT3DDEVICE9 g_lpd3dDevice = NULL;

HRESULT DIRECT3D::InitD3D(HWND hWnd)
{
if((g_lpD3D=Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
return E_FAIL;


D3DPRESENT_PARAMETERS d3dpp;

ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETERS));
d3dpp.Windowed=TRUE;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=D3DFMT_UNKNOWN;


if(FAILED(g_lpD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_lpd3dDevice)))
{
MessageBox(NULL, "error at creating device", "error", NULL);

return E_FAIL;
}


return S_OK;
}


bekomme aber die MessageBox.

Warum kann ich kein Device erstellen!!

Was jemand die Antwort.

Danke!!!!!!

TheGamer

Demirug
2003-07-01, 19:34:32
Der Code ist korrekt.

Schritt 1: Mit DXDiag prüfen ob der DX Test läuft.

Schritt 2: Die Debugversion von DX aufspielen und auf maximalen Informationsausgabe stellen.

TheGamer
2003-07-01, 21:56:10
Es funzt ja jedes Spiel mit Direct3D, und auch DxDiag Test. Wie schalte ich die volle Debug Funktion ein.

TheGamer

Demirug
2003-07-01, 22:11:29
DirectX Control Panel -> Direct3D

Oben Links den Regler unter "Output Debug Level" ganz nach rechts. Da wo "More" steht.

Und dann muss natürlich auch noch "Use Debug Version of Direct3D" auf der rechten Seite oben angewählt sein.

TheGamer
2003-07-02, 10:26:50
Ja ok hab ich gemacht, ich nehm mal an jetzt mein Programm starten, hab ich gemacht. Und jetzt nichts passiert ausser meiner MessageBox. Was sollte passieren?

TheGamer

Demirug
2003-07-02, 10:28:03
Welche IDE benutzt du denn?

TheGamer
2003-07-02, 10:55:33
VC++ 6.0

Demirug
2003-07-02, 11:02:02
Dann mach mal bitte mit Ansicht->Ausgabe das Output Fenster auf. Dort sollten dann eine ganze Menge DX Meldungen auflaufen.

Alternativ gibt es im DXSDK auch ein Programm dbmon welches den gleichen zweg erfüllt.

TheGamer
2003-07-02, 14:27:36
Ok hab ich gemacht ich hab folgende Ausgabe:


Direct3D9: :====> ENTER: DLLMAIN(00c134f0): Process Attach: 0000066c, tid=00000760
Direct3D9: (WARN) :Executing processor detection code (benign first-chance exception possible)

Direct3D9: (INFO) :MMX detected

Direct3D9: (INFO) :Pentium Pro CPU features (fcomi, cmov) detected

Direct3D9: (INFO) :dwCPUFamily = 6, dwCPUFeatures = 7

Direct3D9: (INFO) :szCPUString = AuthenticAMD

Direct3D9: :====> EXIT: DLLMAIN(00c134f0): Process Attach: 0000066c
Direct3D9: (INFO) :Direct3D9 Debug Runtime selected.
Direct3D9: (ERROR) :Neither hDeviceWindow nor Focus window specified. CreateDevice Failed.
Loaded 'C:\WINDOWS\system32\msctf.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\SSSensor.dll', no matching symbolic information found.
Loaded 'D:\Babylon\captlib.dll', no matching symbolic information found.
Direct3D9: :====> ENTER: DLLMAIN(00c134f0): Process Detach 0000066c, tid=00000760
Direct3D9: (INFO) :MemFini!
Direct3D9: (ERROR) :Memory still allocated! Alloc count = 4
Direct3D9: (ERROR) :Current Process (pid) = 0000066c
Direct3D9: (ERROR) :Memory Address: 00a13e4c lAllocID=1 dwSize=000047f8, ReturnAddr=00c13336 (pid=0000066c)
Direct3D9: (ERROR) :Memory Address: 00a1a1e4 lAllocID=9 dwSize=00001074, ReturnAddr=00c0dcd9 (pid=0000066c)
Direct3D9: (ERROR) :Memory Address: 00a12724 lAllocID=10 dwSize=00000008, ReturnAddr=00c0dd79 (pid=0000066c)
Direct3D9: (ERROR) :Memory Address: 00a1b28c lAllocID=11 dwSize=00000520, ReturnAddr=00c12ae5 (pid=0000066c)
Direct3D9: (ERROR) :Total Memory Unfreed From Current Process = 23956 bytes
Direct3D9: :====> EXIT: DLLMAIN(00c134f0): Process Detach 0000066c
The thread 0x760 has exited with code 0 (0x0).
The program 'F:\VC++\PROJECTS\D3DTest\Debug\Render.exe' has exited with code 0 (0x0).


Ich kann mit dem nicht viel anfangen.

Was heißt das??

TheGamer

Demirug
2003-07-02, 14:38:51
Direct3D9: (ERROR) :Neither hDeviceWindow nor Focus window specified. CreateDevice Failed.

Er mag dein Fenster nicht. Vergessen vorher zu erzeugen?

TheGamer
2003-07-02, 14:48:10
Nein hab ich nicht vergessen. Das WindowHandle das ich InitD3D übergebe müsste auch passen.


INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShowCmd)
{


WNDCLASSEX wc;


wc.style= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc= (WNDPROC) MsgProc;
wc.cbClsExtra= 0;
wc.cbWndExtra= 0;
wc.hInstance= hInst;
wc.hIcon= LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor= LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground= NULL;
wc.lpszMenuName= NULL;
wc.lpszClassName= "RenderClass";



RegisterClassEx(&wc);

HWND hWnd;

hWnd = CreateWindow("RenderClass", "Render",
WS_OVERLAPPEDWINDOW,
100, 100, 400, 400,
GetDesktopWindow(),
NULL,
wc.hInstance,
NULL);

if(hWnd!=NULL)
{
log.Failure("Create Window");
}
else
{
log.Success("Create Window");
}

if(SUCCEEDED( d3d->InitD3D(hWnd) ))
{


ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );


MSG msg;

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

return 0;
}

Demirug
2003-07-02, 15:09:12
Ich behaupte jetzt mal ganz frech das du kein Fenster hast. Da felt nämlich was.


memset (&wc, 0, sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);


einfügen vor

wc.style= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc= (WNDPROC) MsgProc;

TheGamer
2003-07-02, 15:23:06
Tja ich sag nur wozu hat man Profis :D

Vielen Dank :)

CYA
TheGamer

Der verzweifelte David
2007-10-12, 01:29:32
Liebe DirectX-Profis!


Ihr seid meine letzte Rettung.

Ich habe ein Problem mit dem THQ-Spiel "Full Spectrum Warrior". Dieses Spiel habe ich auf 2 PCs installiert, beide haben klarerweise unterschiedliche Hardware und Treiber, aber dasselbe XP drauf. Auf beiden ist DirectX 9.0c installiert.

Ich habe das Spiel auf beiden Rechner gleich installiert, auf dem einen gehts, am anderen nicht.

Es tritt genau der hier besprochene Fehler "DirectX Error: CreateDevice" ein.

Durch Euren Beitrag ist mir jetzt wenigstens klar geworden, daß das mit dem Fensteraufbau von DirectX zusammenhängt. Das ist ja schon was.

Ich hab mich jetzt mit den Bildschirmeinstellungen rumgespielt, was nix gebracht hab. Auch eine Verknüpfung mit der Einstellung "Maximiertes Fenster" brachte nichts.

In einem anderen Forum wird davon gesprochen, daß eine Neuinstallation des Audiotreibers (??) das Problem angeblich gelöst haben soll.

THQ bzw. GreenPepper, die dieses eigentlich antiquierte, aber trotzdem saugute Spiel aufgekauft haben, erklären mir nach der Zusendung eines DX-Testergebnisses, daß ich meine Treiber aktualisieren soll. Mehr haben die Hoschis nicht zu bieten. (typisch Billigspiel-Support)

Gesagt, getan, neuen ATI-Treiber drauf. Auch Soundblaster Live neu installiert. Keine Änderung :-(

Ich steh voll an - in einem Black Sabbath-Song von 1973 singt Ozzy "Tell me, people, am I going insane?" Mir geht's mittlerweile auch so.

Ihr scheint echte Profis zu sein - woher bekomm ich z.B: diese Debug-Version von DirectX, die mir die Fehlermeldungen aushaut? Alles andere klingt nach echter Hackerei und Code-Klopferei, und bei einem fertigen Code wird man wohl keine Chance haben. Aber vielleicht kann rausfinden, ob ein Treiber ein Problem macht, oder eine falsche DLL-Datei, die man evtl. austauschen kann.

Mir kommt übrigens vor, daß es genau beim Intro-Video spinnt - das sind so Bink-Filme. Gut, ich lade mir die neueste Version von Bink runter - und die Videos funktionieren alle. Ich hab dann die bink-dll-Datei ausgetauscht - kein Resultat - aber auf dem Rechner, wo das Spiel funzt, wird der Ton von dem Video ausgegeben, aber es erscheint nur ein weißer Bildschirm. Die anderen Videos gehen. Am anderen PC eben nur diese Fehlermeldung.

Auf dem Rechner mit der funktionierenden Installation knistert auch ab und zu der Ton, als würde ein Audiobuffer-Problem bestehen.... *grübel*

Könnt Ihr mir vielleicht weiterhelfen??

Meine Email-Adresse lautet david.bajzek(at)gmx.at


Mit hoffnungsvollen Grüssen und ein schönes Wochenende auch,
David

Gast
2008-03-11, 15:45:53
Hallo, vielleicht kann mir jemand beim Initialisieren von direct3d helfen, da hänge ich fest.
Weil die Geschwindigkeit bald ein Problem werden wird, habe ich mir vorgenommen, mir schnelle 2d Ausgabe über directx rechtzeitig anzuschauen, bin aber im Moment außerordentlich frustriert.
Programm schreibe ich in c als normale Windows Applikation mit dem Visual Studio 6.

Habe vorhin frisch von microsoft das directx sdk vom März heruntergeladen und installiert.

2 Probleme:

1)Ich kann nur die d3d9.lib verwenden. Für die d3d9d.lib wird immer behauptet "kann nicht geöffnet werden"...\lib\x86 ist als Pfad für Bibliotheken eingetragen und sowohl d3d9.lib, als auch d3d9d.lib liegen da eigentlich.

2)Wenn ich d3d9.lib verwende und ganz langsam das Tutorial0 nachvollziehen will, komme ich an den Punkt, wo
g_pD3D->CreateDevice(...) aufgerufen wird.
Das liefert ganz hartnäckig den Fehler
"error C2039: 'CreateDevice' : Ist kein Element von 'IDirect3D9'"
was mich inzwischen in die Knie gezwungen hat....

Mache ich etwas falsch, oder muss ich noch etwas beachten? Hilfe wäre super, wenn jemand so ein Problem schon gelöst hat und zufällig hier reinguckt. Der thread ist ja schon etwas tot.


danke euch!

Coda
2008-03-12, 12:38:24
1.) Es gibt keine d3d9d.lib, es gibt nur die Debug-Runtime und d3dx9d.lib

2.) Ohne Code kann man dazu nichts sagen.