  | 
				
					JLI Spieleprogrammierung
    
					
					
				 | 
			 
		
	
 
		 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	 
	
	
		| Autor | 
		Nachricht | 
	 
	
		theLegacy Mini JLI'ler
 
 
  Anmeldedatum: 04.06.2003 Beiträge: 13 Wohnort: Österreich Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 04.06.2003, 11:03    Titel: Hilfe! Programm beendet sich selber!! | 
				     | 
			 
			
				
  | 
			 
			
				Hi!
 
 
Ich bin ein Anfänger in sachen c++ und directX
 
deshalb habe ich mir ein buch gekauft :
 
    directX9 und visual c++
 
Sehr gutes buch muss ich sagen nur leider hab ich nur probleme!!
 
Ab den Kapitel 20 glaube ich entwickelt man ein directX fenster
 
nur leider geht das fenster kurz auf und verschwindet wieder!!
 
im debugger steht das das programm mit -1 beendet wurde!!
 
 
ok, dachte ich mir und hab die fehlerabfänger ausgeschalten!! und da
 
kann eine meldung über einen speicher der nicht zugegriffen darf oder
 
so!
 
 
weiss einer von euch was da los ist!!
 
nochwas! alle beispiele vom diesen buch funktionieren komplett gleich
 
wie mein problem!
 
hab dann die beispiele vom directX9 SDK getestet und die funktionieren!!
 
 
cu | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Mäscht JLI'ler
 
 
  Anmeldedatum: 22.05.2003 Beiträge: 150 Wohnort: Bad Hofgastein\Österreich Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 12:07    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hast du eh den return wert am Ende gleich null gesetzt? 
 
 
 
Am Besten wäre es wenn du einen kleinen Codeauschnitt herzeigst! _________________ Motz´z mi net o, i bin ofänga!! AEIOU für immer | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		theLegacy Mini JLI'ler
 
 
  Anmeldedatum: 04.06.2003 Beiträge: 13 Wohnort: Österreich Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 12:39    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Ja!
 
 
wie es passiert auch bei den beispielen im buch!
 
 
ich hab es die ursache gefunden, weiss aber was das bedeutet!
 
wenn ich debug modus compiliere kommt dieser fehler:
 
 
der fehler tritt ihr auf:
 
 
     lpD3DDevice->Clear(0,0,D3DCLEAR_TARGET, ClearColor, 0,0);
 
 
fehler meldung, hinweis:
 
     Unbehandelte Ausnahme in DirectXGraphics.exe: 0x00000005:
 
     Access Violation
 
 
weiss jemand wass das heissen soll!
 
 
danke | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		The Lord of Programming Living Legend
  
  Alter: 38 Anmeldedatum: 14.03.2003 Beiträge: 3122
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 12:42    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Ich glaube, diesen Fehler hatte ich auch schon mal bei einem früheren Projekt. Das heißt AFAIK, dass der Fensterinhalt geleert wird, obwohl das Programm gar nicht mehr das Recht dazu hat.
 
<edit>
 
Du könntest vielleicht, wenn alle Objekte freigegeben werden eine Variable auf 'true' stellen und in dem Fall den Bildschirm nicht mehr leeren.
 
</edit> _________________ www.visualgamesentertainment.net 
 
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
 
(1) Realtime Developer Testing and Debugging Console
 
  
 
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
 
Hilf Schäuble! Damit er auch was findet...
  Zuletzt bearbeitet von The Lord of Programming am 05.06.2003, 12:44, insgesamt einmal bearbeitet | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Hazel JLI MVP
  
  
  Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 12:43    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Anscheinend ist ein Zeiger ungültig. _________________ *click* Dabuu!?
 
Twitter: http://twitter.com/Ollie_R
 
 | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		theLegacy Mini JLI'ler
 
 
  Anmeldedatum: 04.06.2003 Beiträge: 13 Wohnort: Österreich Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 12:44    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| und was mache ich jetzt damit das funktioniert?? | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		The Lord of Programming Living Legend
  
  Alter: 38 Anmeldedatum: 14.03.2003 Beiträge: 3122
  Medaillen: Keine 
	
  | 
		 | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		theLegacy Mini JLI'ler
 
 
  Anmeldedatum: 04.06.2003 Beiträge: 13 Wohnort: Österreich Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 12:47    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				@The Lord of Programming
 
 
leider weiss ich nicht was du damit meinst!
 
 
kann das sein das die beispiele im diesen buch nicht allen
 
funktionieren?? | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		The Lord of Programming Living Legend
  
  Alter: 38 Anmeldedatum: 14.03.2003 Beiträge: 3122
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 12:51    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Also, du machst eine globale Variable z.B. bool freigeben=false.
 
Dann setzt du vor der "Beendungsfunktion" diese Variable auf true.
 
 	  | Code: | 	 		  WM_DESTROY:
 
freigeben=true;
 
//DX-Freigaben
 
DestroyWindow(0);
 
return 0; | 	  
 
In der Render funktion machst du dann vor allen Anweisungen
 
 	  | Code: | 	 		  | if(freigeben==true) return; | 	  
 
So wird auf keinen Fall etwas auf den Bildschirm gezeichnet(oder gelöscht), wenn gerade die Objekte freigegeben werden. _________________ www.visualgamesentertainment.net 
 
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
 
(1) Realtime Developer Testing and Debugging Console
 
  
 
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
 
Hilf Schäuble! Damit er auch was findet... | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		theLegacy Mini JLI'ler
 
 
  Anmeldedatum: 04.06.2003 Beiträge: 13 Wohnort: Österreich Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 12:54    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				ich was heraus gefunden!!
 
 
wenn ich case: WM_PAINT alle D3D code lösche dann kommt die
 
meldung D3D wurde nicht geladen!!
 
 
kann es sein das bei mir DirectX nicht richtig funktioniert??
 
 
nur komisch ist das die beispiele vom SDK problemlos funktionieren!
 
 
mein system ist:
 
amd 2600+
 
win2k mit sp3
 
matrox g450 dh grafikkarte
 
1gb ram | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		The Lord of Programming Living Legend
  
  Alter: 38 Anmeldedatum: 14.03.2003 Beiträge: 3122
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 12:57    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Poste bitte mal den Code(Vielleicht hast du ja zu viel gelöscht) _________________ www.visualgamesentertainment.net 
 
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
 
(1) Realtime Developer Testing and Debugging Console
 
  
 
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
 
Hilf Schäuble! Damit er auch was findet... | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		theLegacy Mini JLI'ler
 
 
  Anmeldedatum: 04.06.2003 Beiträge: 13 Wohnort: Österreich Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 13:01    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				hier der code:
 
 
hab stelle markiert!
 
 
 	  | Code: | 	 		  
 
/*
 
    Jetzt lerne ich Spieleprogrammierung mit DirectX und Visual C++
 
 
    Programmname: DirectXGraphics
 
 
    Beschreibung: Dieses Programm zeigt wie DirectX Graphics initialisiert wird.
 
 
                  Führen Sie das Programm durch Drücken von F5 aus.
 
*/
 
 
 
// Headerdateien
 
#include <d3d9.h>
 
#include <d3dx9.h>
 
 
// Anwendungsfenster erzeugen
 
HWND CreateMainWindow(HINSTANCE hInstance);
 
 
// Callback Funktion zur Nachrichtenbehandlung
 
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
 
 
// Funktion zur Initialisierung von Direct3D
 
BOOL InitDirect3D(HWND hWnd);
 
 
// Direct3D-Objekte wieder freigeben
 
void CleanUpDirect3D(void);
 
 
// Zeiger auf das Direct3D-Objekt (Interface)
 
LPDIRECT3D9       lpD3D       = NULL;
 
 
// Zeiger auf das Direct3D-Device
 
LPDIRECT3DDEVICE9 lpD3DDevice = NULL;
 
 
 
// Das Fensterhandle
 
HWND hWnd = 0;
 
 
// Windows main-Funktion
 
int WINAPI WinMain(HINSTANCE hInstance,      // Handle der Programminstanz
 
                   HINSTANCE hPrevInstance,  // Handle der letzten Instanz
 
                   LPSTR lpCmdLine,          // Kommandozeile
 
                   int nCmdShow)             // Art wie das Fenster angezeigt werden soll
 
{
 
    // Fenster erzeugen und Handle speichern
 
    hWnd = CreateMainWindow(hInstance);
 
 
    // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
 
    if(0 == hWnd)
 
    {
 
        MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
 
        return -1;
 
    }
 
 
    // Direct3D initialisieren
 
    if(!InitDirect3D(hWnd))
 
    {
 
      MessageBox(0,"D3D konnte nicht geladen werden!","Fehler",MB_OK);
 
      return -1;
 
   }
 
 
   // Struktur, in der Informationen zur Nachricht gespeichert werden
 
    MSG msg;
 
 
    // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
 
    while(GetMessage(&msg,NULL,0,0))
 
   {
 
        // Nachricht an die Callbackfunktion senden
 
        TranslateMessage(&msg);
 
        DispatchMessage(&msg);
 
    }
 
 
    // Direct3D-Objekte wieder frei geben
 
    CleanUpDirect3D();
 
 
    // Rückgabewert an Windows
 
    return 0;
 
}
 
 
// Fenster erzeugen
 
HWND CreateMainWindow(HINSTANCE hInstance)
 
{
 
    WNDCLASSEX wndClass =
 
    {
 
        sizeof(WNDCLASSEX),                                 // Größe angeben
 
        CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW,    // Standardstile
 
        MessageHandler,                                     // Callback-Funktion
 
        0,                                                  // Zusätzliche Angaben
 
        0,                                                  // nicht benötigt
 
        hInstance,                                          // Anwendungsinstanz
 
        LoadIcon(NULL, IDI_WINLOGO),                        // Windows-Logo
 
        LoadCursor(NULL, IDC_ARROW),                        // Normaler Cursor
 
        (HBRUSH)GetStockObject(WHITE_BRUSH),                // Weißer Pinsel
 
        NULL,                                               // kein Menü
 
        "WindowClass",                                      // Der Name der Klasse
 
        LoadIcon(NULL, IDI_WINLOGO)                         // Windows Logo
 
    };
 
 
 
    RegisterClassEx(&wndClass);
 
 
    return CreateWindowEx(NULL,                   // Keine erweiterten Stile nutzen
 
                          "WindowClass",          // Klassenname
 
                          "DirectX Graphics",     // Fenstertitel
 
                          WS_OVERLAPPEDWINDOW |   // Fenster
 
                          WS_VISIBLE,             // Eigenschaften
 
                          0, 0, 800, 600,         // Anfangsposition und Größe
 
                          NULL,                   // Handle des Elternfensters
 
                          NULL,                   // Handle des Menüs
 
                          hInstance,              // Anwendungsinstanz
 
                          NULL);                  // wird nicht benötigt
 
}
 
 
 
// Diese Funktion wird von Windows aufgrufen, wenn
 
// eine Nachricht für Ihr Programm vorliegt
 
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
{
 
    // Farbe für die Füllung des Backbuffer festlegen
 
    D3DCOLOR ClearColor = D3DCOLOR_XRGB(0,0,0xFF);
 
 
    // testen, um welche Nachticht es sich handelt
 
    switch(msg)
 
    {
 
        // Programm beenden, wenn das Fenster
 
        // geschlossen wird
 
        case WM_DESTROY:
 
                PostQuitMessage(0);
 
                return 0;
 
             break;
 
 
        case WM_KEYDOWN:
 
               switch(wParam)
 
               {
 
                 // Wenn ESC gedrückt, Anwendung beenden
 
                 case VK_ESCAPE:
 
                         DestroyWindow(hWnd);
 
                      break;
 
               }
 
             break;
 
 
        case WM_PAINT:
 
/*****************************************************/
 
// hier tritt der fehler auf!!
 
/*****************************************************/
 
                // Puffer mit blau füllen
 
                lpD3DDevice->Clear(0,0,D3DCLEAR_TARGET, ClearColor, 0,0);
 
 
                lpD3DDevice->BeginScene();
 
                lpD3DDevice->EndScene();
 
 
                lpD3DDevice->Present(0,0,0,0);
 
 
             break;
 
    }
 
 
    // Standardnachrichtenverarbeitung von Windows
 
    return DefWindowProc(hwnd, msg, wParam, lParam);
 
}
 
 
 
// Direct3D initialisieren
 
BOOL InitDirect3D(HWND hWnd)
 
{
 
    // Direct3D-Objekt erzeugen
 
    lpD3D = Direct3DCreate9(D3D_SDK_VERSION);
 
 
    if(NULL == lpD3D)
 
    {
 
     // Fehler, D3D-Objekt wurde nicht erzeugt
 
     return FALSE;
 
    }
 
 
    // Parameter für den Modus festlegen
 
    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)))
 
    {
 
        // Fehler, kann Gerät nicht anlegen
 
        return FALSE;
 
    }
 
 
   return TRUE;
 
}
 
 
// Direct3D Objekte freigeben
 
void CleanUpDirect3D(void)
 
{
 
    // testen, ob die Objekt angelegt
 
    // wurden und ggf. freigeben
 
    if(NULL != lpD3DDevice)
 
    {
 
        lpD3DDevice->Release();
 
        lpD3DDevice = NULL;
 
    }
 
 
    if(NULL != lpD3D)
 
    {
 
        lpD3D->Release();
 
        lpD3D = NULL;
 
    }
 
}
 
 | 	 
  | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		The Lord of Programming Living Legend
  
  Alter: 38 Anmeldedatum: 14.03.2003 Beiträge: 3122
  Medaillen: Keine 
	
  | 
		 | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Mäscht JLI'ler
 
 
  Anmeldedatum: 22.05.2003 Beiträge: 150 Wohnort: Bad Hofgastein\Österreich Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 13:14    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Oida! Bei DX9 gibt´s jo wida neiche befehle zum Lerna! Geh!! _________________ Motz´z mi net o, i bin ofänga!! AEIOU für immer | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		theLegacy Mini JLI'ler
 
 
  Anmeldedatum: 04.06.2003 Beiträge: 13 Wohnort: Österreich Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 05.06.2003, 13:15    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				ja
 
 
hab die sdk von der cd installiert! | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
  | 
   
 
  
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de 
 |