JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=22fa862c88a51451ed739bd4d5b3e4fcMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Hilfe! Programm beendet sich selber!!
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
theLegacy
Mini JLI'ler



Anmeldedatum: 04.06.2003
Beiträge: 13
Wohnort: Österreich
Medaillen: Keine

BeitragVerfasst am: 04.06.2003, 11:03    Titel: Hilfe! Programm beendet sich selber!! Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Mäscht
JLI'ler



Anmeldedatum: 22.05.2003
Beiträge: 150
Wohnort: Bad Hofgastein\Österreich
Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 12:07    Titel: Antworten mit Zitat

Hast du eh den return wert am Ende gleich null gesetzt?
Code:

return 0,


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
Benutzer-Profile anzeigen Private Nachricht senden
theLegacy
Mini JLI'ler



Anmeldedatum: 04.06.2003
Beiträge: 13
Wohnort: Österreich
Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 12:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 12:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 12:43    Titel: Antworten mit Zitat

Anscheinend ist ein Zeiger ungültig.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
theLegacy
Mini JLI'ler



Anmeldedatum: 04.06.2003
Beiträge: 13
Wohnort: Österreich
Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 12:44    Titel: Antworten mit Zitat

und was mache ich jetzt damit das funktioniert??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 12:45    Titel: Antworten mit Zitat

Siehe 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...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
theLegacy
Mini JLI'ler



Anmeldedatum: 04.06.2003
Beiträge: 13
Wohnort: Österreich
Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 12:47    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 12:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
theLegacy
Mini JLI'ler



Anmeldedatum: 04.06.2003
Beiträge: 13
Wohnort: Österreich
Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 12:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 12:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
theLegacy
Mini JLI'ler



Anmeldedatum: 04.06.2003
Beiträge: 13
Wohnort: Österreich
Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 13:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 13:13    Titel: Antworten mit Zitat

Hast du wirklich die DX9 SKD drauf?
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mäscht
JLI'ler



Anmeldedatum: 22.05.2003
Beiträge: 150
Wohnort: Bad Hofgastein\Österreich
Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 13:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
theLegacy
Mini JLI'ler



Anmeldedatum: 04.06.2003
Beiträge: 13
Wohnort: Österreich
Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 13:15    Titel: Antworten mit Zitat

ja

hab die sdk von der cd installiert!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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

Impressum