DirectX "stürzt ab"

Ja.

Also du musst die TriBaseD.dll bzw TriBase.dll in das Debug Verzeichnis deiner Projektes kopieren.
Also dahin wo auch die .exe deines Projekts liegt.
In diesem Fall hier hin:
c:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\debug

Ist leider sehr umständlich aber der einzige Weg den ich kenn.

Noch ein Tipp:
Wenn du das ganze als Release erstellst müssen die entsprechenden DLL's natürlich nicht im "Debug" Verzeichnis liegen sondern im "Release" Verzeichnis.

Jetzt sollte alles gehen.

Viel Spaß mit dem Buch ;)
 
Die Dateien wurden in den Debug Ordner kopiert. Nun lautet die Fehlermeldung wie folgt:
Die Anwendung konnte nicht gestartet werden, weil d3dx9d_30.dll nicht gefunden werden konnte.:(

Wo liegt diese Datei? Muss ich wirklich bei hedem neuen Projekt etliche Treiberdateien auf meiner Festplatte hin und her schieben und hoffen das ich zufällig alles richtig mache?:confused: Gibt es einen einfacheren Weg? Kann ich z.B. vc++2008 einmal angeben wo es Dateien suchen soll?

Bei Code::Blocks konnte man in einem Linker Verzeichnis Dateien wie kernel32, ole32,... angeben. Ich gehe davon aus, dass das auch Treiber waren. Gibt es eine äquivalente Option bei vc++2008?

Wie ist dein vc++2008 eingestellt, was machst du, wenn du ein neues Projekt erstellst?
 
Hi,

um diese Fehlermeldung zu umgehen sollte man das neuste DirectX SDK benutzen.

Warscheinlihc arbeitest du mit einem veralteten, und die Dll's dazu sind schon längst nicht mehr vorhanden.

Falls du das von der CD benutzt schleunigst weg damit !!

Das ist mehrere Jahre alt.

Falls du das neue SDK schon drauf hast erstell die TriBase.dll mal neu. Diese ruft auch die veralteten dll's auf.

Natürlich muss man nicht alle Treiberdaten immer kopieren.
Wenn sich diese im Windows Verzeichnis befinden werden sie automatisch geladen.

Aber ich denke nich das es eine gute Idee ist den Windows Ordner mit sämtlichen Dll vollzupacken.

Gruß
Anfänger

PS:
Wenn dir das zu umständlich ist, suche mal bei Google nach der DLL ich bin sicher du wirst schnell fündig.
Falls nicht kanst du auch einfach eine neuere umbennen. Das Hat bei mir früher auch immer Funktioniert *g*
 
Ja dann musst du die TriBase neu ertsllen.

Du Kopierst den Ordner von der CD (hast du ja warscheinlich schon gemacht) und öffnest das Projekt. Dann einfach rechtsklick auf das Project->erstellen.

Gruß
Anfänger

PS:
Falls es nicht klappt kann ich sie dir auch gleich nochmal erstellen.
 
Ich habe die Datei Tribase 2005 aus der CD in vc++2008 gestartet und erstellt,
dann habe ich die Datei TriBaseD.dll in mein Projekt kopiert. Das Projekt lässt sich problemlos starten. Vielen Dank.
Ich weiß nicht, ob du alle Beiträge gelesen hast, am Anfang konnte ich das Projekt auch in Code::Blocks noch starten, es stürzte nur immer ab. Dann war auf einmal die Kompilierung mit Code::Blocks unmöglich. Nun kann ich das Projekt mit vc++2008 erstellen, doch abstürzen tut es auch hier. Es scheint sich um einen Nullzeiger zu handeln. Irgendwo im folgenden Code steckt wahrscheinlich der Fehler, denn bei der ersten Benutzung von g_pd3ddev stürzt das Programm ab:
Code:
void initdx()
{
g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
D3DDISPLAYMODE d;
g_pd3d->GetAdapterDisplayMode(0,&d);
D3DPRESENT_PARAMETERS pParam;
ZeroMemory(&pParam,sizeof(pParam));
pParam.BackBufferWidth=d.Width;
pParam.BackBufferHeight=d.Height;
pParam.BackBufferFormat=d.Format;
pParam.BackBufferCount=1;
pParam.MultiSampleType=D3DMULTISAMPLE_NONE;
//pParam.MultiSampleQuality=1;
pParam.SwapEffect=D3DSWAPEFFECT_COPY;
pParam.hDeviceWindow=hwnd;
pParam.Windowed=TRUE;
pParam.EnableAutoDepthStencil=false;
//pParam.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
pParam.FullScreen_RefreshRateInHz=d.RefreshRate;
pParam.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
g_pd3d->CreateDevice(0,D3DDEVTYPE_HAL,hwnd,D3DCREATE_MIXED_VERTEXPROCESSING,&pParam,&g_pd3ddev);
};

Hier noch die Ausgabe:
Code:
"dreick.exe": "C:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\Debug\dreick.exe" geladen, Symbole wurden geladen.
"dreick.exe": "C:\WINDOWS\system32\ntdll.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\kernel32.dll" wurde geladen
"dreick.exe": "C:\Dokumente und Einstellungen\Martin Klein\Eigene Dateien\Visual Studio 2008\Projects\dreick\Debug\TriBaseD.dll" geladen, Symbole wurden geladen.
"dreick.exe": "C:\WINDOWS\system32\d3d9.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\d3d8thk.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\gdi32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\user32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\msvcrt.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\advapi32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\rpcrt4.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\secur32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\version.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\winmm.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\D3dx9d_41.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\dinput8.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\dsound.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\ole32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\comdlg32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\shlwapi.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\comctl32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\shell32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\oleaut32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcr90d.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\uxtheme.dll" wurde geladen
"dreick.exe": "C:\WINDOWS\system32\msctf.dll" wurde geladen
Eine Ausnahme (erste Chance) bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Unbehandelte Ausnahme bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Eine Ausnahme (erste Chance) bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Unbehandelte Ausnahme bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Eine Ausnahme (erste Chance) bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Unbehandelte Ausnahme bei 0x00411579 in dreick.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Das Programm "[1348] dreick.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.
 
@anfängerregnäfna: Hast du meinen Beitrag von heute Morgen nicht gelesen?

Und nutze bitte zukünftig in deinen Beiträgen unten rechts den "Ändern"-Button, wenn du noch etwas hinzufügen bzw. nachreichen willst, anstatt in den Themen im Minutentakt neue Beiträge zu verfassen - vielen Dank!
Hab hier erneut deine Doppelposts zusammenführen dürfen :rolleyes:

mfg Maik
 
Hi,

Also:

Teste mal auf Fehler das macht die Sache einfacher:
C++:
{
    g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
    if(!g_pd3d) {
        MessageBoxA(NULL,"Can not create Direct3D Interface!","Error",MB_OK)
        return FALSE;
    }
    D3DDISPLAYMODE d;
    g_pd3d->GetAdapterDisplayMode(0,&d);
    D3DPRESENT_PARAMETERS pParam;
    ZeroMemory(&pParam,sizeof(pParam));
    pParam.BackBufferWidth=d.Width;
    pParam.BackBufferHeight=d.Height;
    pParam.BackBufferFormat=d.Format;
    pParam.BackBufferCount=1;
    pParam.MultiSampleType=D3DMULTISAMPLE_NONE;
    //pParam.MultiSampleQuality=1;
    pParam.SwapEffect=D3DSWAPEFFECT_COPY;
    pParam.hDeviceWindow=hwnd;
    pParam.Windowed=TRUE;
    pParam.EnableAutoDepthStencil=false;
    //pParam.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
    pParam.FullScreen_RefreshRateInHz=d.RefreshRate;
    pParam.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
    if(FAILED(g_pd3d->CreateDevice(0,D3DDEVTYPE_HAL,hwnd,D3DCREATE_MIXED_VERTEXPROCESSING,&pParam,&g_pd3ddev)))
    {
        MessageBoxA(NULL,"Can not create Direct3DDevice Interface!","Error",MB_OK)
        return FALSE;
    }
};

Damit lässt sich der Fehler schonmal begrenzen.
Ich denke mal es liegt an den "Einstellungen" in D3DPRESENT_PARAMETERS.

Gruß
Anfänger
 
Zuletzt bearbeitet von einem Moderator:
Hi,

benutze mal D3DSWAPEFFECT_DISCARD anstatt D3DSWAPEFFECT_COPY.

Und statt D3DPRESENT_INTERVAL_DEFAULT, D3DPRESENT_INTERVAL_ONCE.

Außderm teste mal ob das Fenster hwnd gültig / bzw erstellt ist.

Gruß
Anfänger
 
Zurück