SDL_LoadBMP



  • Nein, das war es nicht 😞

    Hier bekomme ich die Acces Violation:

    SDL_BlitSurface(bild, NULL, screen, &ziel);
    

    MfG Max



  • Keine Ahnung. Surfaces gelockt?!
    Was sagen die Vars im Debugger?!



  • Und was sagt die Access Violation?

    Bye, TGGC (Der Held ist zurück)



  • Guten Mittag,
    vielen dank ersteinmal an alle.
    Mir scheint es so als wäre die SDL.dll kaputt.
    Hier also die Fehlermeldungen:

    Microsoft Visual C++ schrieb:

    Unbehandelte Ausnahme in SDLV2.exe (SDL.DLL): 0x000005: Acces Violation

    VocabularyTeacher04: SDLV2.exe-Fehler in Anwendung schrieb:

    Die Anweisung "0x100200ac9" verweist auf Speicher in "0xccccccf8"
    Der Vorgang "read" konnte nicht auf dem Speicher ausgeführt werden.

    Hoffentlich könnt ihr was damit anfangen.
    Vielen dank im voraus.

    MfG Max



  • Guten Mittag,
    Kann es sein das es an dem SDL_Surface Pointer liegt,
    der uninitialiesiert ist?
    Aber das wurde eigentlich überall genauso gemacht.

    MfG Max



  • So, und jetzt suchst du mal den Zeiger, der ungefähr auf ccccccf8 zeigt! Der ist wahrscheinlich nicht initialisiert, da der Speicher im Debug Modus mit 0xcc gefüllt wird. Daran liegt es offensichtlich.

    Bye, TGGC (Der Held ist zurück)



  • Damit du auf ein SDL_Surface blitten kannst, musst du natürlich mit SDL_CreateSurface oder etwas ähnlichem eins allokieren! Auch den Screen musst du mit SDL_SetVideoMode initialisieren.
    geloescht



  • Guten Nachmittag,
    Danke an alle ich habe es hinbekommen:

    class Surface
    {
    private:
    	char *m_data;
    	SDL_Surface *m_screen;
    	SDL_Surface *m_bitmap;
    	SDL_Rect dest;
    public:	
    	Surface::Surface(char *data,int x,int y,SDL_Surface *screen,SDL_Surface *bitmap)
    		:m_data(data),
    	     m_screen(screen),
    		 m_bitmap(bitmap)
    		{
    		dest.x=x;
    		dest.y=y;
    		}
    
    	void Surface::ShowIMG()
    	{
    		m_bitmap=SDL_LoadBMP(m_data);
    
    		dest.w=m_bitmap->w;
    		dest.h=m_bitmap->h;
    
    		SDL_BlitSurface(m_bitmap,0,m_screen,&dest);
    
    		SDL_UpdateRects(m_screen,1,&dest);
    	}
    
    };
    
    int main()
    {
    
    	SDL_Surface *screen,*bitmap;
    
    	SDL_Init(SDL_INIT_VIDEO);	
    
    	screen=SDL_SetVideoMode(1024,768,32,SDL_HWSURFACE);
    
    	Surface VocabularyTeacher("VocabularyTeacher.bmp",0,0,screen,bitmap);
                VocabularyTeacher.ShowIMG();
    
    	SDL_Delay(3000);
    
    	return 0;
    }
    

    Ist noch ein Fehler drin?

    MfG Max



  • ja, das programm schmirt ab, wenn der video mode nicht klappt



  • Du räumst SDL nicht ordnungsgemäß auf. Du brauchst ein SDL_QUIT vor dem Programmende! Für SDL_Delay muss man soweit ich weiß das Time-Subsys initialisierem.
    geloescht



  • Guten Abend.
    Ja, natürlich, in meiner initialisierungsklasse wird alles mit Fehlerabfrage gesetzt initialisiert...
    Das war nur ein Test.
    Ist in dieser Klasse noch ein gravierender Fehler, irgendwie gefällt sie mir nicht.

    MfG Max



  • Hmm... Naja, so wird bei jedem aufruf von ShowIMG das Bild neu geladen. Wenn du die Funktion oft benutzt, solltest du das Bild am besten im Ctor laden und im Dtor wieder freigeben. Dann musst du allerdings aufpassen, dass du selbst einen Standard-Konstruktor(edit: und den Copyconstruktor, und operator= usw.) definierst!
    geloescht



  • Danke, das war es, werde ich machen.

    MfG max


Anmelden zum Antworten