Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

1

15.11.2003, 21:52

Direct3D Fehler

Hallo!

Ich habe gerade versucht, mal selbst nen D3D-Fenster zu erstellen, klappt auch soweit. Die Funktion ist in einer externen DLL ausgelagert.

Nur, wenn ich die Nachrichtenschleife verlasse, dann sehe ich diese Ausgabe im Debug-Fenster von VC6:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Direct3D9: :====> ENTER: DLLMAIN(00e94fe0): Process Detach fff33a1b, tid=fff3380f
Direct3D9: (INFO) :MemFini!
Direct3D9: (ERROR) :Memory still allocated!  Alloc count = 80
Direct3D9: (ERROR) :Current Process (pid) = fff33a1b
Direct3D9: (ERROR) :Memory Address: 0105425c lAllocID=7 dwSize=000047f8, ReturnAddr=00e94e26 (pid=fff33a1b)
Direct3D9: (ERROR) :Memory Address: 01150970 lAllocID=11 dwSize=00000438, ReturnAddr=00e8ff09 (pid=fff33a1b)
Direct3D9: (ERROR) :Memory Address: 011606ac lAllocID=12 dwSize=00000160, ReturnAddr=00e945d5 (pid=fff33a1b)
Direct3D9: (ERROR) :Memory Address: 01058a80 lAllocID=17 dwSize=00000870, ReturnAddr=00e95db5 (pid=fff33a1b)
Direct3D9: (ERROR) :Memory Address: 01059314 lAllocID=19 dwSize=00003500, ReturnAddr=00e94e26 (pid=fff33a1b)
Direct3D9: (ERROR) :Memory Address: 011604ec lAllocID=20 dwSize=00000198, ReturnAddr=00e94e26 (pid=fff33a1b)
Direct3D9: (ERROR) :Memory Address: 01160fbc lAllocID=21 dwSize=00000030, ReturnAddr=00e94e26 (pid=fff33a1b)
Direct3D9: (ERROR) :Memory Address: 0105c838 lAllocID=22 dwSize=00001020, ReturnAddr=00e94e26 (pid=fff33a1b)
Direct3D9: (ERROR) :Memory Address: 0105d87c lAllocID=23 dwSize=0000081c, ReturnAddr=00e94e26 (pid=fff33a1b)
Direct3D9: (ERROR) :Memory Address: 01160efc lAllocID=24 dwSize=00000090, ReturnAddr=00e94e26 (pid=fff33a1b)
Direct3D9: (ERROR) :Memory Address: 01160eac lAllocID=25 dwSize=00000024, ReturnAddr=00e94e26 (pid=fff33a1b)
Direct3D9: (ERROR) :Total Memory Unfreed From Current Process = 42424 bytes
Direct3D9: :====> EXIT: DLLMAIN(00e94fe0): Process Detach fff33a1b


Das Programm beendet dann, wenn ich IDirect3DDevice9::Release() aufrufe. Im Debug Fenster kommen dann ganz viele Meldungn von wegen c000000005 Zugriffsverletzung

Dann kommt das berühmte Fenster "Diese Anwendung wird aufgrund eines ungültigen Vorgangs beendet..."

Klick ich da auf Schließen, so kommt das Fenster immer wieder, ich krieg es nciht weg. Nun würd ich gerne wissen, was denn da los ist...

Gruß, Maxi
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

15.11.2003, 22:52

Poste mal Quellcode, das könnte alles mögliche sein...

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

3

15.11.2003, 23:12

OK, werds versuchen:

Also, CreateDevice funktioniert, das Fenster wird erstellt.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//DllMain von der Dll die die Funktionen beihnhaltet
// Kurz bevor diese aufgerufen wird, kommen die Speicherfehler. Genau in der Funktion exit(mainret) (weiß nicht welche Datei die ist) kommen sie
BOOL APIENTRY DllMain( HMODULE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved )
{
  me_g_DllHandle = hModule;
  
// Wenn beendet wird, dann meShutDown aufrufen
if(ul_reason_for_call == DLL_PROCESS_DETACH)
    meShutDown();

return TRUE;
}

// Und noch was in Shutdown passiert:
m_D3DDevice->Release();
m_Direct3D->Release();
// beides sind keine Null-Zeiger


Hoffe, du kannst ihr könnt mir jetzt helfen...

Gruß, Maxi
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

16.11.2003, 00:25

Es könnte zu spät sein, erst zu Releasen, wenn Deine DLL entladen wird. Dann könnte die Direct3D-DLL nämlich schon vorher entladen worden sein... probier mal, was passiert, wenn Du es etwas früher tust.

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

5

16.11.2003, 10:27

Ja, das klapt jetzt.
Aber dann muss der Benutzer ja die Exit-Methode aufrufen. Gibt es noch ne andere Möglichkeit, die noch vor dem Dll-Entladen auszuführen? Bei TriBase geht es ja auch, und für mich sieht das genauso aus wie ichs gemacht hab.
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

16.11.2003, 11:07

Bei der TriBase ist das nur als "Notlösung" gedacht. Normalerweise musst Du ja auch tbExit aufrufen.

Es geht aber auch so: Du verwendest eine Singleton-Klasse. Deren einzige Instanz wird dann beim Beenden automatisch gelöscht, und im Destruktor kannst Du das D3D-Device freigeben etc..

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

7

16.11.2003, 11:13

OK, danke erstmal

Nehm jetzt nen SingleTon, da klappt es gut, auch ohne ExitEngine();

*stolzsei*
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

Werbeanzeige