Problem beim Kompilieren der Beispiele des Buches 3d-Spieleprogrammierung
-
Vielleicht liegt es ja auch an der Version, VS2008 Express...
-
Was für libs linkst du alles?
-
dot schrieb:
Was für libs linkst du alles?
Beitrag 1
Die Tuer schrieb:
TriBase.lib DXErr.lib Dxerr9.lib d3d9.lib d3dx9.lib dinput8.lib dxguid.lib winmm.lib odbc32.lib odbccp32.lib Gdi32.Lib User32.Lib AdvAPI32.Lib Comdlg32.lib Ole32.Lib Oleaut32.lib Comctl32.lib kernel32.lib shell32.lib
-
Bist du schon mal auf "Projekt bereinigen" und dann auf "Neu erstellen" gegangen?
Danach schau einfach mal unter Projekteigenschaften --> VC++-Verzeichnisse nach ob da auch bei Bibliothekverzeichnisse die entsprechenden Verzeichnisse für das Platform SDK und das DXSDK eingetragen sind.Was mir gerade noch auf gefallen ist...sind diese libs auch case sensitive? Probier mal aus, ob es einen Unterschied zwischen User32.lib oder user32.lib gibt!
-
@udopolis
Ich habe gemerkt dass ich eigentlich nur 4 der libs linken muss, der Rest hatte keine Auswirkung auf die Fehler, also waren überflüssig...@Nasghat
Ich habe das Projekt bereinigt und neu erstellt, doch dann kommen wieder die gleichen Fehermeldungen...
Und in den VC++ Verzeichnissen habe ich drin:
Microsoft DirectX SDK
DX9 SDK
Tribase
Microsoft SDKWie du siehst habe ich 2 Dx sdk, wenn ich jedoch eins von Beiden weglasse, fehlen ein paar include-Dateien...
Zu allen h-Dateien habe ich die passenden lib-Dateien eingebunden
ps: Die Dateien sind nicht Case sensitive
-
ps: bei dem einem hat nur eine Datei gefehlt, die ich jetzt rüberkopiert habe, also hab ich jetzt nur noch 1 dx9 sdk included
-
Komisch, wenn ich das Plattform-sdk weglasse, zeigt er keine fehler an, aber das fenster wird auch nicht gestartet -.-
-
Hast du denn auch die Lib und Include-Pfade bekannt gemacht?
DAs kann man bei Extras->Optionen->Projekte und Projektmappen->Vc++Verzeichnisse einstellen. Das wird aber auch in dem Buch erklärt. So ziemlich am Anfang. (S.25 ff)
-
Die Tuer schrieb:
Und in den VC++ Verzeichnissen habe ich drin:
Microsoft DirectX SDK
DX9 SDK
Tribase
Microsoft SDK
-
Die Tuer schrieb:
Die Tuer schrieb:
Und in den VC++ Verzeichnissen habe ich drin:
Microsoft DirectX SDK
DX9 SDK
Tribase
Microsoft SDKOh, Mist.
Da hätte ich mal besser sorgfältiger gelesen...
-
Das sind doch auch Sachen, die schon seit anfang an in VS da sind, oder nicht
(wie z.B. MessageBoxA)1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__SetDlgItemTextA@12". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__DialogBoxParamA@20". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__EnableWindow@8". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__IsDlgButtonChecked@8". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__CheckDlgButton@12". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__EndDialog@8". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetDlgItem@8". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_Direct3DCreate9@4". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetSaveFileNameA@4". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetModuleHandleA@4". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__SendDlgItemMessageA@20". 1>Direct3DEnum.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetOpenFileNameA@4". 1>InitDirect3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DXGetErrorDescription9A@4". 1>InitDirect3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DXGetErrorString9A@4". 1>InitDirect3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__ShowCursor@4". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetStockObject@4". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__LoadCursorA@8". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__AdjustWindowRect@12". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetSystemMetrics@4". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__DefWindowProcA@16". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__CreateWindowExA@48". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__UnregisterClassA@8". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__SetRect@20". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__BeginPaint@8". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__FillRect@12". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__PostQuitMessage@4". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__RegisterClassExA@4". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__DestroyWindow@4". 1>InitWindow.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__EndPaint@8". 1>Main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__MessageBoxA@16". 1>Main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__LoadIconA@8". 1>MSVCRT.lib(crtexew.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__InterlockedExchange@8". 1>MSVCRT.lib(crtexew.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__Sleep@4". 1>MSVCRT.lib(crtexew.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__InterlockedCompareExchange@12". 1>MSVCRT.lib(crtexew.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetStartupInfoA@4". 1>MSVCRT.lib(gs_report.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__TerminateProcess@8". 1>MSVCRT.lib(gs_report.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetCurrentProcess@0". 1>MSVCRT.lib(gs_report.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__UnhandledExceptionFilter@4". 1>MSVCRT.lib(gs_report.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__SetUnhandledExceptionFilter@4". 1>MSVCRT.lib(unhandld.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__SetUnhandledExceptionFilter@4". 1>MSVCRT.lib(gs_report.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__IsDebuggerPresent@0". 1>MSVCRT.lib(gs_support.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__QueryPerformanceCounter@4". 1>MSVCRT.lib(gs_support.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetTickCount@0". 1>MSVCRT.lib(gs_support.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetCurrentThreadId@0".
-
Ich glaub, ich habe den Fehler gefunden, ich habe bei den lib-dateien des Windows SDKs /7.0/Lib/x64 angegeben und nicht /7.0/Lib jetzt zeigt er keine Fehler mehr an, aber das Fenster startet nicht
-
So da hab ich den Fehler, dass das Fenster nicht startet, ich hab das mal Zeile für Zeile debugt und dann kam dies hier an der Schleifenfunktion raus:
Unbehandelte Ausnahme bei 0x00bc345c in 1.Dreieck.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000. Eine Ausnahme (erste Chance) bei 0x00bc345c in 1.Dreieck.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000. Unbehandelte Ausnahme bei 0x00bc345c in 1.Dreieck.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000. Eine Ausnahme (erste Chance) bei 0x00bc345c in 1.Dreieck.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000. Unbehandelte Ausnahme bei 0x00bc345c in 1.Dreieck.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
-.- was ist das denn schon wieder
-
Poste doch mal den Code, in dem der Fehler vorkommt. Das sieht mit nach einem fehklerhaften Umgang mit einem Array aus, aber ohne Code kann ich das nicht beutreilen.
MfG, Jochen
-
Hier der Code
(Den Code habe ich von der CD kopiert und eingefügt, sollte also klappen...)#include <Windows.h> #include <TriBase.h> #include <D3D9.h> #include "..//..//Allgemeines//Direct3DEnum.h" #include "..//..//Allgemeines//InitWindow.h" #include "..//..//Allgemeines//InitDirect3D.h" #include "Resource.h" struct SVertex { tbVector3 vPosition; // Position des Vertex DWORD dwColor; // Farbe des Vertex static const DWORD dwFVF; // Vertexformat (statisch) }; const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_DIFFUSE; // ******************************************************************5 // Globale Variablen SDirect3DParameters g_Direct3DParameters; // Direct3D-Parameter float g_fTime = 0.0f; // Zeitzähler SVertex g_aTriangleVertex[3]; // Die drei Vertizes des Dreiecks // ****************************************************************** // Render-Funktion tbResult Render(float fNumSecsPassed) { HRESULT hResult; tbMatrix mRotation; // Rotationsmatrix tbMatrix mTranslation; // Translationsmatrix tbMatrix mWorld; // Vereinende Weltmatrix // Rotations- und Translationsmatrix des Dreiecks erzeugen mRotation = tbMatrixRotationY(TB_DEG_TO_RAD(g_fTime * 90.0f)); mTranslation = tbMatrixTranslation(tbVector3(0.0f, 0.0f, 2.0f)); // Beide Matrizen kombinieren und als Weltmatrix einsetzen mWorld = mRotation * mTranslation; g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld)); // ------------------------------------------------------------- // Den Bildpuffer und den Z-Buffer leeren if(FAILED(hResult = g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 63), 1.0f, 0))) { // Fehler beim Leeren! MessageBoxA(g_hWindow, "Fehler beim Leeren der Puffer!", "Fehler", MB_OK | MB_ICONEXCLAMATION); TB_ERROR_DIRECTX("g_pD3DDevice->Clear", hResult, TB_STOP); } // Szene beginnen g_pD3DDevice->BeginScene(); // Nun das Dreieck zeichnen if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, // Dreiecksliste 1, // 1 Dreieck g_aTriangleVertex, // Vertexdaten sizeof(SVertex)))) // Vertexgröße { // Fehler beim Zeichnen! MessageBoxA(g_hWindow, "Fehler beim Zeichnen des Dreiecks!", "Fehler", MB_OK | MB_ICONEXCLAMATION); TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP); } // Szene beenden g_pD3DDevice->EndScene(); // Der große Moment: den Bildpuffer sichtbar machen g_pD3DDevice->Present(NULL, NULL, NULL, NULL); return TB_OK; } // ****************************************************************** // Move-Funktion tbResult Move(float fNumSecsPassed) { // Zeitzähler erhöhen g_fTime += fNumSecsPassed; return TB_OK; } // ****************************************************************** // Herunterfahren der Szene tbResult ExitScene() { return TB_OK; } // ****************************************************************** // Herunterfahren der Anwendung tbResult ExitApplication() { // Szene herunterfahren ExitScene(); // Direct3D und Fenster herunterfahren ExitDirect3D(); ExitWindow(); // Engine herunterfahren tbExit(); return TB_OK; } // ****************************************************************** // Initialisieren der Szene tbResult InitScene() { HRESULT hResult; tbMatrix mProjection; float fAspect; // Vertexformat setzen - Positions- und Farbangabe if(FAILED(hResult = g_pD3DDevice->SetFVF(SVertex::dwFVF))) { // Fehler beim Setzen des Vertexformats! TB_ERROR_DIRECTX("g_pD3DDevice->SetFVF", hResult, TB_ERROR); } // Beleuchtung und Culling ausschalten, Dithering aktivieren g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE); // Das Bildseitenverhältnis berechnen fAspect = (float)(g_Direct3DParameters.VideoMode.Width) / (float)(g_Direct3DParameters.VideoMode.Height); // Die Projektionsmatrix erzeugen mProjection = tbMatrixProjection(TB_DEG_TO_RAD(90.0f), // Sichtfeld: 90° (180°) fAspect, // Bildseitenverhältnis 0.1f, // Nahe Clipping-Ebene 100.0f); // Ferne Clipping-Ebene // Projektionsmatrix einsetzen g_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection)); // Initialisieren des Dreiecks g_aTriangleVertex[0].vPosition = tbVector3( 0.0f, 1.0f, 0.0f); g_aTriangleVertex[1].vPosition = tbVector3( 1.0f, -1.0f, 0.0f); g_aTriangleVertex[2].vPosition = tbVector3(-1.0f, -1.0f, 0.0f); g_aTriangleVertex[0].dwColor = tbColor(1.0f, 0.0f, 0.0f); g_aTriangleVertex[1].dwColor = tbColor(0.0f, 1.0f, 0.0f); g_aTriangleVertex[2].dwColor = tbColor(0.0f, 0.0f, 1.0f); return TB_OK; } // ****************************************************************** // Initialisierungsfunktion tbResult InitApplication() { tbResult Result; // TriBase-Engine initialisieren tbInit(); // Direct3D-Optionen abfragen (vom Benutzer gewählt) Result = GetDirect3DParameters(&g_Direct3DParameters); if(Result == TB_ERROR) { // Es trat ein Fehler auf! MessageBoxA(NULL, "Fehler beim Abzählen!", "Fehler", MB_OK | MB_ICONEXCLAMATION); return TB_ERROR; } else if(Result == TB_CANCELED) { // Der Dialog wurde abgebrochen! return TB_CANCELED; } // Fenster initialisieren. Die Größe hängt vom gewählten // Videomodus ab, der in der Parameterstruktur gespeichert ist. if(InitWindow(g_Direct3DParameters.VideoMode.Width, g_Direct3DParameters.VideoMode.Height, "Beispielprogramm Nr. 3: Das erste Dreieck", LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)))) { // Fehler beim Erstellen des Fensters! MessageBoxA(NULL, "Fehler beim Erstellen des Fensters!", "Fehler", MB_OK | MB_ICONEXCLAMATION); return TB_ERROR; } // Direct3D mit den abgefragten Einstellungen initialisieren if(InitDirect3D(&g_Direct3DParameters, g_hWindow)) { // Fehler! MessageBoxA(g_hWindow, "Fehler beim Initialisieren von Direct3D!", "Fehler", MB_OK | MB_ICONEXCLAMATION); ExitApplication(); return TB_ERROR; } // Szene initialisieren if(InitScene()) { // Fehler! MessageBoxA(g_hWindow, "Fehler beim Initialisieren der Szene!", "Fehler", MB_OK | MB_ICONINFORMATION); ExitApplication(); return TB_ERROR; } // Alles OK! return TB_OK; } // ****************************************************************** // Windows-Hauptfunktion int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* pcCmdLine, int iShowCmd) { tbResult Result; // Initialisierung Result = InitApplication(); if(Result == TB_CANCELED) return 0; else if(Result) { MessageBoxA(NULL, "Fehler beim Initialisieren der Anwendung!", "Fehler", MB_OK | MB_ICONEXCLAMATION); return 1; } // Nachrichtenschleife tbDoMessageLoop(Render, Move); // Herunterfahren ExitApplication(); return 0; } // ******************************************************************
-
In Zeile 234 cancelt der immer bei mir, und wenn ich diese Zeile weglasse, kommen die Fehler
-
Ps: Der Fehler kommt in Zeile
40 vor, also beig_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
(ist doch nur ein Fehler)
-
Vielleicht wurde für g_pD3DDevice kein Speicher reserviert, weil im Auto sagt er bei g_pD3DDevice
g_pD3DDevice 0x0000000000
->IUnknow {...}
->_vfprt CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden
-
Ich hab den Fehler jetzt etwas lokalisisiert:
Bei der Funktion InitApplication gibt er mit TB_CANCELED zurück (in zeile 171 Result = GetDirect3DParameters(&g_Direct3DParameters);)
Das komische ist, darüber steht was von// Direct3D-Optionen abfragen (vom Benutzer gewählt)
bei mir kommt aber nicht so ein Abfragungsfenster o.O
-
Wow, 21500 Ergebnisse, wenn man bei Google "kompelieren" eingibt (liest man hier ja auch öfter mal). Bald steht's im Duden.