Beispiel für DirectX9.C Problem



  • TGGC schrieb:

    Du versuchst ASCII in Unicode Zeichen zu casten. Das geht nicht! f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)

    Hallo TGCC,
    danke für deinen Post leider habe ich mit dem Thema gerade erst angefangen. Laut Buch sollte der Code so gehen wie ich Ihn hier gepostet habe, daher weiß ich leider (noch) nicht was ich ändern muss. Im Buch wird der Code erklärt aber ich weiß nicht wo ich ansetzen muss damit es geht. Es würde mich ehr freuen wenn du mir die Zeilen nummer sagen könnstet welche ich überarbeiten muss. Da ich mit
    'const char [48]' in 'LPCWSTR' nicht möglich
    (noch) nicht viel anfangen kann.

    Gruß JDJ



  • Die Zeilennummer sagt dir der Compiler in der Fehlermeldung. f'`8k

    BTW: Was hat der Fehler mit DX zu tun?

    Autocogito

    Gruß, TGGC (\-/ has leading)



  • TGGC schrieb:

    Die Zeilennummer sagt dir der Compiler in der Fehlermeldung. f'`8k
    BTW: Was hat der Fehler mit DX zu tun?

    Autocogito

    Gruß, TGGC (\-/ has leading)

    Soweit wie ich verstanden habe muss ich
    const char konvertieren in LPCWSTR und das geht mit MultiByteToWideChar. Aber wie wende ich das an? Damit habe ich noch nicht gearbeitet und aus der MS hilfe zu MultiByteToWideChar werd ich da nicht schlau.

    Gruß JDJ



  • Ja, das könntest du so konvertieren. Aber warum legst du deine Stringliterale dann nicht gleich als Unicode an? f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)



  • TGGC schrieb:

    Ja, das könntest du so konvertieren. Aber warum legst du deine Stringliterale dann nicht gleich als Unicode an? f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)

    Wie Konvertiere ich das bei einer MessageBox? Laut Hilfe von MS ist der MessageBox Inhalt: LPCTSTR.



  • Genau wie bei allem anderen. f'`8k

    Autocogito

    Gruß, TGGC (\-/ has leading)



  • 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.



  • 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.

    Ich benutze Microsoft Visual C++ 2005 Express Edition.
    Ok ich schalte es ein und dann probiere ich es nochmal.



  • chrische5 schrieb:

    Welche IDE verwendest du? Visual Studio?

    Wer lesen kann, ist klar im Vorteil. 😎

    Gruß, TGGC (\-/ has leading)



  • 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


Anmelden zum Antworten