Nicht aufgelöstes Externes Symbol die 4. :(
-
Hallo, ich habe das Problem, das folgender C++ Code nicht läuft, ich habe jetzt schon zwei nächte daran gesessen, aber den Fehler nicht gefunden
Wäre nett wenn ihr was wüsstet :xmas1:#include <windows.h> #include <d3d9.h> #include <d3dx9.h> //Funktion um Das Fenster zu erzeigen HWND CreateMainWindow(HINSTANCE hInstance); //Direct3D Initialisieren BOOL InitDirect3D(HWND hWnd); //Direct3D "Deaktivieren" void CleanUpDirect3D(); // Zeiger auf das Direct3D-Objekt (Interface) LPDIRECT3D9 lpD3D = NULL; // Zeiger auf das Direct3D-Device LPDIRECT3DDEVICE9 lpD3DDevice = NULL; //Nachrichten Funtkion (CallBack) LRESULT CALLBACK MessageHandler(HWND hwnd,UINT msg, WPARAM wParam, LPARAM lParam); HWND hWnd=0; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) { hWnd=CreateMainWindow(hInstance); if(hWnd==0) { MessageBox(0,"Fehler beim erstellen des Fensters!","Fehler!",MB_ICONEXCLAMATION); return -1; } if(!InitDirect3D(hWnd)) { MessageBox(0,"Konnte kein DirectX9 Support nutzen.","DirectX Fehler",MB_ICONEXCLAMATION); return -1; } MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } CleanUpDirect3D(); return 0; } LRESULT CALLBACK MessageHandler(HWND hwnd,UINT msg, WPARAM wParam,LPARAM lParam) { D3DCOLOR ClearColor=D3DCOLOR_XRGB(0,0,0); switch(msg) { case WM_DESTROY: PostQuitMessage(0); return 0; break; case WM_KEYDOWN: switch(wParam) { case VK_ESCAPE: DestroyWindow(hWnd); break; } case WM_PAINT: lpD3DDevice->Clear(0,0, D3DCLEAR_TARGET, ClearColor, 0,0); lpD3DDevice->BeginScene(); lpD3DDevice->EndScene(); lpD3DDevice->Present(0,0,0,0); break; } return DefWindowProc(hwnd,msg,wParam,lParam); } HWND CreateMainWindow(HINSTANCE hInstance) { WNDCLASSEX wndClass = { sizeof(WNDCLASSEX), CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW, MessageHandler, 0, 0, hInstance, LoadIcon(NULL,IDI_WINLOGO), LoadCursor(NULL, IDC_ARROW), (HBRUSH)GetStockObject(WHITE_BRUSH), NULL, "WindowClass", LoadIcon(NULL,IDI_WINLOGO) }; RegisterClassEx(&wndClass); return CreateWindowEx( NULL, "WindowClass", "ein einfaches Fenster", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0,0, 400,300, NULL, NULL, hInstance, NULL); } BOOL InitDirect3D(HWND hWnd) { lpD3D = Direct3DCreate9(D3D_SDK_VERSION); if(NULL == lpD3D) { MessageBox(0,"Konnte nicht auf die DirectX9 schnittstelle zugreifen","DirectX Fehler",MB_ICONEXCLAMATION); return FALSE; } D3DPRESENT_PARAMETERS PParams; ZeroMemory(&PParams,sizeof(PParams)); PParams.SwapEffect = D3DSWAPEFFECT_DISCARD; PParams.hDeviceWindow = hWnd; PParams.Windowed = TRUE; PParams.BackBufferWidth = 800; PParams.BackBufferHeight = 600; PParams.BackBufferFormat = D3DFMT_A8R8G8B8; //Direct3D Gerät anlegen... if(FAILED(lpD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &PParams, &lpD3DDevice))) { MessageBox(0,"Konnte kein DirectX Gerät anlegen","DirectX Fehler",MB_ICONEXCLAMATION); return FALSE; } return TRUE; } void CleanUpDirect3D() { if(NULL != lpD3DDevice) { lpD3DDevice->Release(); lpD3DDevice = NULL; } if(NULL != lpD3D) { lpD3D->Release(); lpD3D = NULL; } }
Der Debugger sagt das:
error LNK2019: Nicht aufgelöstes externes Symbol '_Direct3DCreate9@4', verwiesen in Funktion '"int __cdecl InitDirect3D(struct HWND__ *)" (?InitDirect3D@@YAHPAUHWND__@@@Z)'
Danke im v :xmas1: oraus
-
Mit dem Debugger hat aber die Fehlermeldung nichts zu tun! Die kommt vom Linker...
Hast Du auch die nötigen LIBs in den Linker settings (Additional dependecies) hinzugefügt? Siehe Doku zu den DX9 Funktionen (ganz unten)
-
Ich hab die DX9 Libs eingefüxt einmal die Libs und einmal die Includes...
oder ferstehe ich da jetzt was falsch ?!
-
tschuldigug ich kenne mich damit zwar leider nicht aus (DX9)
aber ich glaube er meint folgendes
Sounds simple enough, right? Remember, since we are using Direct3D, you must include d3D9.h and d3dx9.h. You must also link d3d9.lib, d3dx9.lib, and dxguid.lib.
also du musst bei deinen ProjektEinstellungen beim Linker zusätzlich folgende Libs angeben
d3d9.lib
d3dx9.lib
dxguid.lib(hab die info von folgendem Link)
http://www.gamedev.net/reference/articles/article1943.aspund da ich das Fenster von Visual Studio grad auf hab
Projekt-->Eigenschaften von ...-->Linker-->Eingabe--> Zusätzliche Abhängigkeiten
-
YEAH !!!! Danke,danke,danke !!!
Ein glück dann kann kann ich ja jetzt weiter proggen
THX @ ALL! :xmas1: :xmas1: :xmas1:
-
Ein glück dann kann kann ich ja jetzt weiter proggen
Das hättest du jetzt lieber gepfiffen. Ich mein du weist doch im Grunde gar nicht was du machst.
Der Code von dir hat garnichts mit MFC am hut in der schule wäre das ne 6 mit der Auszeichnung Thema verfehlt. Natürlich sehen wir das hier nicht so eng aber scheinbar scheinst du nicht mal zu wissen wie ein nicht aufgelöstet externes symbol zustande kommt.
Wie kanst du da von "weiter programmieren" reden.
-
So... Also
1. brauchst de normal net alle 3 libs.
2. Falsches Forum... ... WINAPI WinMain(HINSTANCE ...
3. du musst dir mal nen Buch anschaffen in dem man C++ lernt... und danch dann eins womit man DX lernt.. so wird das nix :!
-
@XeXeS und (D)Evil: Habt ihr beide die Nacht net gut geschlafen oder was ist mit euch Los???
erstmal zu dir XeXeS Du Mukierst dich hier über ihn das er das nicht Programmieren nennen darf nur weil er mal etwas nicht weiss??? hast du anders angefangen zu Programmieren? ich glaube das haben wir hier alle gemeinsam das wir angefangen haben und erstmal bei unseren ersten Programmen nicht wussten was wir da tun ob mit Tutorial oder ohne. Und es gab bei allen auch Probleme dir wir uns nicht erklären konnten wo aber jeder Profie nur drüber lachen könnte. und zum thema nicht aufgelöste Symbole gibt es auch andere Ursachen
@(D)Evil so nu zu dir KlugScheisser
erstens wenn du schon sagst das er nicht alle Libs braucht
1. brauchst de normal net alle 3 libs.
sach ihm doch auch bitte welche er nicht braucht
zwotens
2. Falsches Forum... ... WINAPI WinMain(HINSTANCE ...
ersten Teil deiner Behauptung stimme ich zu (es ist das falsche forum)
der zweite Teil ist erstens Schwachsinn und zweitens falschdenn erstens sagt der verwendete einstiegsPunkt einer Anwednung nichts darüber aus ob es bei dem anschließenden Code ausschließlich um c , Winapi oder MFC handelt sein code für DirektX9 könnte genauso gut in einem MFC Programm mit dem einstiegspunkt ONInitInstance() stehen
zweitens Klugscheiße ich mal ich bin nämlich der meinung es währe im Folgenden forum besser aufgehoben
Spiele-/Grafikprogrammierung
Beben, Duke und Halflife... wer träumt nicht davon? DirectX, Direct3D, OpenGL, SDL, Strategien und Grafik. Hier könnt Ihr Euch austoben. Nur für registrierte Nutzer.Und wieso Buch ??? ich habe noch nicht ein einziges Buch zum thema c++ oder ähnliches gelesen und programmiere doch mehr oder weniger sinnvoll vor mich hin
aber du hättest ihm vielleicht mal nen schönen Link zu dem thema geben können
hoffe ihr habt morgen ne bessere Laune
-
Skippy
Dank dir hab ich jetzt erst recht ne beschißene Laune!So: zu meinem 2. Punkt... wo ist den der MFC EInstiegspunkt oder welchen auch immer du haben willst? da ist nur nen WinAPI Einstiegspunkt und damit kann man so behaupten das es sich um ein WinAPI Programm handelt! Und ja, von mir aus, pack es ins Spieleprogrammierer Forum.... aber wenn man das noch nicht mal weiß(was nicht aufgelöstes externes sysbol heißt) dann sollte man meiner Meinung nach nicht mit der Spieleprogrammierung anfangen sondern mit den Grundlagen von C++.
So deine geforderten Links:
3D-Spieleprogrammierung mit DirectX 9 und C++, m. CD-ROM von David Scherfgen - Dafür sollte man aber wenigstens nen bissel wissen wie man in C++ Programmiert(sowas wie Grundlagen hatl :D)
[url=http://www.amazon.de/exec/obidos/ASIN/3446403329/qid=1135795158/sr=1-1/ref=sr_1_2_1/302-0003798-9828823]C++ für Spieleprogrammierer, m. CD-ROM
[/url] - Wenn de mal in richtung Spieleprogrammierung gehen willst, kann man z.B. das nehemen...
und sonnst gibt es da noch um mal nen bissel WinAPI zu lernen
Windows-Programmierung von Charles Petzoldund für C++ an sich gibt es auch haufen weise Bücher... ob se alle so gut sind, kann man drüber streiten
So... "KlugScheisser"
-
@(D)Evil
Skippy
Dank dir hab ich jetzt erst recht ne beschißene Laune!Ok hab ich mein Ziel erreicht für heute
aber wenn man das noch nicht mal weiß(was nicht aufgelöstes externes sysbol heißt
Ich hatte schonmal das vergnügen das ich nach nem Tutorial vorgegangen bin und alles richtig hatte auch die entsprechende Lib befand sich in meinem Linker einstellungen und dennoch kam Plötzlich diese fehlermeldung das ein symbol nicht aufgelöst werden konnte. was denkste wie lange das damal gedauert bis man dahinter kam das es daran lag das ich einen monat vorher diese lib bzw. die ganze Librarie
zu der die lib gehörte upgedatet habe nun war es aber dank pre compiled header aber null problem weiterhin das projekt zu kompilieren obwohl die Funktion nicht mehr in der lib enthalten war bis ich dann mal das projekt an der richtigen stelle bearbeitet hatte und nun eben dieser header neu kompiliert werden musste.Und nun was ist daran so schlimm son paar links zu Posten das hilft ihm mehr als so ein paar dusselige kommentare oder??? du möchtest doch auch das deine fragen hier ordentlich beantwortet werden oder würdest du dich freuen wenn dich jeder anmauelt?
-
lol, kein Grund sich gleich in Grund und Boden zu stampfen (inklusive mir)
Ausserdem, ja ich weiss immernoch nicht was ein unaufgelöstes Symbol ist, weil es mir ja niemand erklärt hat...
Aber was ich Pogge weiss ich schon noch, vielleicht hab ich keinen genauen Plan was hinter Direct X abgeht, aber deswegen progge ich ja nach diesem Buch. ich hab nie behaubtet das ich jetzt irgendwie der pro oder sonstiges wäre !Dieses Thema ist hier, weil ich in der Foren-Suche einen Thread mit einen ähnlichen Thema gefunden hatte, (Nicht aufgelöster externer Verweis)
ich hab nunmal bis jetzt nur in sprachen wie Pure Basic oder PHP,HTML geproggt
(ja ich weiss PHP und HTML sind Scriptsprachen für die die da jetzt gelich weider anfangen wollen)
Und es ist mein erstes DX Programm gewesen!Ich hatte gedacht das mei erster Post positiv wäre....
Naja... kann ja nicht jeder Pro geboren worden sein.