FlipBuffers() verursacht Invalid Memory Access

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

FlipBuffers() verursacht Invalid Memory Access

Beitrag von blbltheworm »

Hallo zusammen,
ich hab folgendes Problem:
Wenn ich von meiner Fullscreen DX-Anwendung (OpenScreen()) aus mit Alt-Tab auf den Desktop wechsle und dann wieder zurück verursacht FlipBuffers() einen Invalid Memory Access und das Programm verabschidet sich.

Was kann ich da dagegen machen??
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Eine alternativlösung wäre:

Finde den Handle des Vollbildes heraus, z. B. so:
Direkt nach OpenScreen() speicherst du in einer Variablen 'hwnd' das Handle mit dem Aufruf von GetForeGroundWindow_() (WIndows API). Dieser befehl gibt immer das Handle des Fensters zurück, das gerade aktiv ist.

Switcht der User raus, hälst du die Programmausführung solange einfach an:

Code: Alles auswählen

While GetForeGroundWindow_() <> hwnd : Wend
Alles klar? :wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

afaik nimmt man dafür IsScreenActive()

..trotzdem höre ich zum ersten mal von diesem verhalten...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Es ist ja logisch das das Programm weiterläuft, während du rausswitchst.

Während wir hier herumdoktern ein Denkanstoß: Ist es möglich, dass du ein "invalides" Ouput benutzt? Also die zeichenfläche, auf die du zeichnest, ist die irgendwie... ja halt nicht gültig, wie PB das sagt? Oder kannst du vielleicht auch mal den gesamten Code posten?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

ist eigentlich komisch da dann ja auch das "IsScreenActive()" nicht gehen würde...
weil ja die ereignisse innerhalb vom "FlipBuffers()" ähnlich wie bei "WindowEvent()" bearbeitet werden.

wenn du willst, probier mal das:

Code: Alles auswählen

FlipBuffers()
If IsScreenActive() = 0
  Repeat
    Delay(100)
    FlipBuffers()
  Until IsScreenActive()
EndIf
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

btw. um welche Version gehts eigentlich?

3.30 kann kein Alt-Tab beim Screen verarbeiten, allerdings sollten dann auch nur die sprites kaputt sein, kein ivalid mem auftreten.

wie die anderen schon sagten, mehr info über den code wären gut.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

@ Jilocasin: Die verschachtelte If/Repeat Schleife kannst du durch eine einfache While-Schleife ersetzen!
Und: Warum flippst du das Bild schon vor der Schleife?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

AND51 hat geschrieben:Warum flippst du das Bild schon vor der Schleife?
Weil ja der aktuelle Status erst mal ermittelt werden muss oder?
(zumindest war das in 3.3. so :| )
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

da verposselst du was.
FlipBuffers() hat nix mit ereignisbehandlung zu schigge.
IsScreenActive() sollte immer den aktuellen status liefern.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

Beitrag von blbltheworm »

Also das ganze ist in PB 4 geschrieben.
Ich hab mal den Code auf's wichtigste beschnitten und hier http://www.digital-joga.de.vu/Test.zip hochgeladen.
Wäre toll, wenn einer von euch den Fehler finden könnte und mir sagt, wie ich ihn loswerde.
Antworten