C++ 2D Text (DirectX) in SA:MP per Client

  • Sehr geehrte Community,


    ich bin gerade am verzweifelten Versuchen einen Text mit DirectX in SA:MP durch einen Client Einzufügen.
    Leider komme ich nur bei Error´s raus. ^^


    Fehlermeldung:

    Code
    Eine Ausnahme (erste Chance) bei 0x00c71cb2 in samp_client.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.



    Code:




    ausgeführt wird es mit dem hier:


    Code
    directXDevice->BeginScene(); 
     
     CreateD3DFont(); 
     
     directXDevice->EndScene();



    Mfg,
    Maximilian


    Einmal editiert, zuletzt von EinfachMax () aus folgendem Grund: Überschrift Bearbeitet

  • Fehlermeldung:

    Code
    Eine Ausnahme (erste Chance) bei 0x00c71cb2 in samp_client.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.


    ....
    D3DXCreateFont( directXDevice, 20, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &lpD3DFont );

    lpD3DFont->DrawText(NULL, "Hello World", -1, &rct, 0, fontColor )

    Zugriffsverletzung (Fehlercode C00..5) an Position 0 tritt zum Beispiel beim Versuch auf, wenn man versucht auf den Wert hinter einem Null-Zeiger zuzugreifen. (void *abc = NULL; print( *abc ); )


    Sofern es an der gezeigten Methode liegt (und directXDevice korrekt ist), wird D3DXCreateFont versagt haben. Man sollte immer die Rueckgabewerte von Funktionen ueberpruefen, die einen Fehler ausloesen koennen und vor Nutzen von Zeigern sichergehen, dass der Zeiger auch auf etwas zeigt, was man haben moechte.


    Nach erfolgreichem Erstellen der Font, sollte der Zeiger lpD3DFont gespeichert werden und vor einem erneuten Aufruf von D3DXCreateFont() zumindest ueberprueft werden, ob man bereits eine Font hat (der Zeiger also nicht Null ist). In dem Beispiel code wird fuer jedes Bild versucht eine neue Font zu initialisieren.
    Wenn D3DXCreateFont nicht erfolgreich war, kann es entweder daran liegen (neue Font fuer jedes Bild), oder an einer falschen Benutzung. Gibt D3DXCreateFont() D3DERR_INVALIDCALL zurueck kann es zum Beispiel sein, dass das angegebene DirectXDevice nicht korrekt ist.

    Einmal editiert, zuletzt von SBIKA ()