Beispiel für DirectX9.C Problem



  • Hallo

    TGGC schrieb:

    chrische5 schrieb:

    Welche IDE verwendest du? Visual Studio?

    Wer lesen kann, ist klar im Vorteil. 😎

    Gruß, TGGC (\-/ has leading)

    Da kann ich dir in diesem Fall nur recht geben.

    chrische



  • chrische5 schrieb:

    Hallo

    Welche IDE verwendest du? Visual Studio? -> dann schalte mal bei den Projektoptionen unter Character Set Multibyte ein.

    chrische

    P.S.: Laß dich nicht verunsichern.

    Hi Chrische5,
    ich habe bei mir sämtliche Optionen durchsucht aber so einen Punkt den du beschreibst finde ich nicht. Wo genau soll dieser sein?

    Gruß JDJ



  • alt+f7, Configuration_Properties->General->Project_Defaults: Character Set



  • hellihjb schrieb:

    alt+f7, Configuration_Properties->General->Project_Defaults: Character Set

    Ich habe es jetzt umgestellt bekomme jetzt aber die FM:

    Test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__MessageBoxA@16" in Funktion "_WinMain@16".
    Test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Direct3DCreate9@4" in Funktion "_WinMain@16".
    MSVCRTD.lib(crtexe.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_main" in Funktion "___tmainCRTStartup".

    Der Code sieht jetzt so aus:

    #include <Windows.h>
    #include <StdIO.h>
    #include <D3D9.h>
    
    int						g_iNumAdapters; //Anzahl der Adapter
    D3DADAPTER_IDENTIFIER9*	g_pAdapters;	//Adapterliste
    PDIRECT3D9				g_pD3D = NULL;	//IDirect3D9-Schnitstelle
    
    int WINAPI WinMain(HINSTANCE hInstance,
    				   HINSTANCE hPrevInstance,
    				   char* pcCmdLine,
    				   int iShowCmd)
    {
    	char acAdapterInfo[1024];
    
    	//Schnittstelle für Direct3D erzeugen
    	g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    	if(g_pD3D ==NULL)
    	{
    		//Fehler
    		MessageBox(NULL, "Fehler beim Erzeugen von Direct3D Schnittstelle",
    			             "Fehler", MB_OK | MB_ICONEXCLAMATION);
    		return 1;
    	}
    	//Adapter Anzahl ermitteln
    	g_iNumAdapters = g_pD3D->GetAdapterCount();
    
    	//Speicher reservieren und Informationen über jeden Adapter sammeln
    	g_pAdapters = new D3DADAPTER_IDENTIFIER9[g_iNumAdapters];
    
    	for(int iAdapter = 0; iAdapter < g_iNumAdapters; iAdapter++)
    	{
    		if(FAILED(g_pD3D->GetAdapterIdentifier(iAdapter, 0, &g_pAdapters[iAdapter])))
    		{
    			//Fehler
    			MessageBox(NULL, "Adapter Information konnte nicht abgefragt werden!",
    					         "Fehler", MB_OK | MB_ICONEXCLAMATION);
    
    			//Aufräumen
    			g_pD3D->Release();
    			delete[] g_pAdapters;
    			return 1;
    		}
    
    		//Adapterinformation anzeigen
    		sprintf(acAdapterInfo, "Adapter-ID: %d\n Name: %s\n Treiber: %s nTreiberversion: %d",
    			  iAdapter,
    			  g_pAdapters[iAdapter].Description,
    			  g_pAdapters[iAdapter].Driver,
    			  g_pAdapters[iAdapter].DriverVersion);
    
    		MessageBox(NULL, acAdapterInfo, "Adapter gefunden", MB_OK | MB_ICONINFORMATION);
    	}
    
    	//Aufräumen
    	g_pD3D->Release();
    	delete[] g_pAdapters;
    
    	return 0;
    }
    


  • Die externen Symbole MessageBox und Direct3DCreate9, welche du in der WinMain benutzt, können nicht aufgelöst werden. Weiterhin hast du keine main-Funktion definiert. f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)



  • #pragma comment (lib, "d3d9.lib")
    #pragma comment (lib, "d3dx9.lib")
    #pragma comment (lib, "dinput.lib")
    #pragma comment (lib, "dinput8.lib")
    #pragma comment (lib, "dxguid.lib")
    #pragma comment (lib, "Winmm.lib")
    

    irgendwelche davon brauchst du



  • TGGC schrieb:

    Die externen Symbole MessageBox und Direct3DCreate9, welche du in der WinMain benutzt, können nicht aufgelöst werden. Weiterhin hast du keine main-Funktion definiert. f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)

    Ich finde es schwierig als Anfänger einen Fehler zu finden den es laut Buch nicht geben dürfte, daher würde ich mich sehr freuen wenn du mir den Code so Posten würdest wie er Funktionieren sollte. Da du das Rätzel ja anscheinend zu lösen vermagst. 😋



  • Der Code sieht von hier ganz ok aus. f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)



  • Hallo

    Versuch den Code mal zu ändern wie Xindon es geschrieben hat. TGGC gibt bestenfalls lustige Antworten oder er zeigt vor allem Leuten, die nicht so viel Ahnung haben wie er (und das sind bbei ihm gefühlte 100%) gerne, was er alles so auf dem Kasten hat.

    chrische



  • Also ich würde dem Linker ja lieber über seine Parameter sagen, wo er die Symbole herkriegt, anstatt das noch zusätzlich in den Code zu frickern. Im Original (Buch) gings ja auch so. f'`8k

    @chrische5: Neidisch? 😎

    Autocogito

    Gruß, TGGC (\-/ has leading)



  • Hallo

    TGGC schrieb:

    @chrische5: Neidisch? 😎

    Wenn ich ehrlich bin, muss ich sagen, dass du wahrscheinlich wirklich um Welten besser programmieren kannst als ich und ich würde das sicher auch gerner kennen. Deine infantile oder pubertäre Art, die allerdings bräuchte ich nicht dazu. Das soll keine Beleidigung sein, aber diese Gottnummer, die ist doch maxinmal eine Woche lustig, aber wenn man einmal angefangen hat, ist es wahrscheinlich gar nicht so leicht mal wieder ernst genommen zu werden.

    chrische



  • TGGC schrieb:

    Im Original (Buch) gings ja auch so.

    Wo genau soll das den stehen? Ich habe das Buch bis zu dem Quelltextbeispiel mehr als einmal nach Lösungen durchsucht und durchgelesen.
    Reden wir über verschiedene Bücher?
    Ich habe das Buch:
    3D-Spieleprogrammierung. Modernes Game Design mit DirectX 9 und C++, mit CD-ROM von David Scherfgen (Gebundene Ausgabe - 2003)

    Ich hab es mit

    #pragma comment (lib, "d3d9.lib") 
    #pragma comment (lib, "d3dx9.lib") 
    #pragma comment (lib, "dinput.lib") 
    #pragma comment (lib, "dinput8.lib") 
    #pragma comment (lib, "dxguid.lib") 
    #pragma comment (lib, "Winmm.lib")
    

    Versucht damit geht es aber auch nicht :(.



  • Ich habe das Buch nicht, daher kann ich dir nicht sagen ob und wo das da drin steht. Trotzdem bin ich der Meinung, das der Quelltext so korrekt funktioniert, wenn Compiler und Linker korrekt eingestellt werden.

    @chrische5:
    Ich brauche nicht ernst genommen zu werden. Ich _bin_ es.

    Und ausserdem, was habe ich denn davon? Soll ich mir morgen ein Schild umhängen, auf dem steht: "Ich wurde auf c++.de ernst genommen"?

    Aus Erfahung weiss ich, das es nicht viel bringt, jemanden zu sagen klick mal da und hier und füg diese Zeile (die ich dir gar nicht erst erkläre) in deinen Code ein. Lernen durch Imitation funktioniert beim Programmieren nicht so gut. Darum unterlasse ich solche Posts. Ich beantworte bzw. kommentiere auf dem Niveau, aud dem jemand fragt oder berichtet. Darum triffst du mich mit deinen Anschuldigungen überhaupt nicht. Wenn ich dann für einen überheblichen Spinner gehalten werde, der meint alles zu Wissen aber nur Unsinn labert, so sei es. Es ist nicht zu meinem Schaden. f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)



  • TGGC schrieb:

    Ich habe das Buch nicht, daher kann ich dir nicht sagen ob und wo das da drin steht. Trotzdem bin ich der Meinung, das der Quelltext so korrekt funktioniert, wenn Compiler und Linker korrekt eingestellt werden.

    Ich habe nichts verändert am Compiler oder am Linker außer den Einstellungen die im Buch gefordert werden.
    Was für Einstellungen sollten denn drin sein wenn nicht standart? Da ich mir nicht bewußt bin was es für falsche Einstellungen denn sein sollten?



  • Grundsätzlich gilt: Alle Einstellungen die Fehler verursachen sind falsch. Die "Standard-Einstellungen" sind abhängig von deinen Einstellungen in der IDE. So gesehen gibt es gar keine Standard-Einstellungen. f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)



  • TGGC schrieb:

    Grundsätzlich gilt: Alle Einstellungen die Fehler verursachen sind falsch. Die "Standard-Einstellungen" sind abhängig von deinen Einstellungen in der IDE. So gesehen gibt es gar keine Standard-Einstellungen. f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)

    😕 😕 😕 😕 😕
    Woher soll ich denn wissen welche Option einen Fehler verursacht?

    Ein Programm wie z.B.
    Textausgabe in der Console geht ohne Probleme.



  • RTFM

    Wichtige Regel für Programmierer: Know your Tools. f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)



  • TGGC schrieb:

    Trotzdem bin ich der Meinung, das der Quelltext so korrekt funktioniert, wenn Compiler und Linker korrekt eingestellt werden.

    Da hat er vollkommen recht.

    Hast du denn das DirectX SDK installiert? Hast du auch in deiner IDE die Pfade für includes und Bibliotheken richtig eingestellt?



  • xindon schrieb:

    TGGC schrieb:

    Trotzdem bin ich der Meinung, das der Quelltext so korrekt funktioniert, wenn Compiler und Linker korrekt eingestellt werden.

    Da hat er vollkommen recht.

    Hast du denn das DirectX SDK installiert? Hast du auch in deiner IDE die Pfade für includes und Bibliotheken richtig eingestellt?

    Ja sind Eingebunden.



  • Muss man bei Visual Studio Express nicht auch noch das Platform SDK installieren wenn ich mich recht entsinne?


Anmelden zum Antworten