Seite 1 von 3

FlipBuffers() verursacht Invalid Memory Access

Verfasst: 28.06.2006 11:39
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??

Verfasst: 28.06.2006 11:48
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:

Verfasst: 28.06.2006 13:15
von Kaeru Gaman
afaik nimmt man dafür IsScreenActive()

..trotzdem höre ich zum ersten mal von diesem verhalten...

Verfasst: 28.06.2006 14:28
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?

Verfasst: 28.06.2006 14:55
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

Verfasst: 28.06.2006 15:02
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.

Verfasst: 28.06.2006 20:27
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?

Verfasst: 29.06.2006 07:48
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 :| )

Verfasst: 29.06.2006 08:17
von Kaeru Gaman
da verposselst du was.
FlipBuffers() hat nix mit ereignisbehandlung zu schigge.
IsScreenActive() sollte immer den aktuellen status liefern.

Verfasst: 29.06.2006 10:34
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.