Page 1 sur 2
Apres un Runprogram perte de mémoire du ScreenOutput()
Publié : ven. 12/nov./2004 12:20
par Thyphoon
Apres avoir lancer un fichiet .bat via Runprogram
le fichier bat lance un jeu
a son retour dans mon programme il me fait une erreur a cette ligne
et me dit "The Specified output is NULL (0 value)" Mais je comprends pas du tout pourquoi ...est ce un bug ? il y a moyen de contourner ce problème ?
Publié : ven. 12/nov./2004 12:31
par Patrick88
il faudrait peut-être faire un close de ton startdrawing avant d'excuter le bat
et faire un startdrawing au moment ou tu reviens si tu as besoin de dessiner qu'e'chose de dedans ...
pat
Publié : ven. 12/nov./2004 13:11
par Thyphoon
le problème c'est que ça vient apres ça se passe dans une boucle
voilà en gros le principe du code
Code : Tout sélectionner
#Window = 0
#Width = 640
#Height = 480
#Mode_initSp = 0 ;
;- Init DirectX
If InitSprite() = 0 Or InitSprite3D() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
CloseWindow(#Window) : End
EndIf
If #Mode_initSp = 0 Or #Mode_initSp = 1
res = OpenWindow(#Window, 0, 0, #Width, #Height, #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Arcadthy")
OpenWindowedScreen(res, 0, 0, #Width, #Height, 0, 0, 0)
Else
OpenScreen( #Width, #Height, 16, "Arcadthy" + ver$ )
EndIf
Repeat ; Jeu
ClearScreen(0, 0, 0)
ExamineKeyboard()
If KeyboardPushed(#PB_Key_space)
RunProgram("play.bat", "", "", 1)
EndIf
StartDrawing(ScreenOutput())
DrawingMode(4)
Box(10, 10, 200, 200, RGB(50, 50, 50))
StopDrawing()
FlipBuffers(0)
If #Mode_initSp = 0 Or #Mode_initSp = 1
While WindowEvent() : Wend ; evite le plantage clic gauche
EndIf
Until KeyboardPushed(#PB_Key_Escape)
si le fichier play.bat lui execute un programme qui ouvre un ecran et bien j'ai le progrem si dans le fichier play.bat je met juste un "Dir" alors ça fonctionne pas d'erreur... apparement il perd la reference de l'ecran
Publié : ven. 12/nov./2004 17:08
par Thyphoon
Alors personne n'a d'idée ?
j'ai essayé en rajoutant un
apres le run programme mais ça ne change rien ... j'ai l'impression qu'il pert toute information d'un screen ouvert .....
Est ce que quelqu'un a réussi a reproduire le bug chez lui ?
Il faut que le fichier bat lance une application qui s'ouvre en plein ecran !
Moi ça le fait avec l'emulateur Mame ...

Publié : ven. 12/nov./2004 17:38
par Anonyme2
Je ne sais pas vraiment, mais d'après ton code
a le dernier paramètre à 1 et la doc dit pour ce paramètre à 1
1: Attend que le programme lancé se termine.
mais d'après cette même doc, il est dit (ce que je comprend comme son contraire)
Lance un programme externe sans suspendre l'exécution du programme en cours (exécution asynchrone).
Peut-être que Mame n'est pas fermé avant que tu n'écrive (?) et ça pourrait entraîner des problèmes (?).
Essaye de lancer le bat avec l'API
CreateProcess_() et juste après avoir exécuter cette API, utilise l'API
GetExitCodeProcess_() en bouclant dessus jusqu'à obtenir la fin de processus
proc\hProcess est retourné par CreateProcess_()
Code : Tout sélectionner
ProcessState = #STILL_ACTIVE
Repeat
GetExitCodeProcess_(proc\hProcess, @ProcessState.l)
Until ProcessState <> #STILL_ACTIVE
Mai je dit tout ça au pif

car je ne sais pas si le problème vient de là
Publié : ven. 12/nov./2004 17:47
par Thyphoon
merci pour ton aide mais apparement ça ne vient pas de là ....
J'ai essayé apres le runprogram de mettre un delay(9000) ça ne change rien. la commande runprogramm attend bien que Mame se soit arrêté pour continuer de parcourir le code.. le delay se fait bien ...mais des que j'arrive a StartDrawing hop erreur... c'est rageant car tout mon programme est basé sur le faite d'executer des programmes annexes sous cette forme ... je vais essayer avec Shellexecute_ voir si ça fait la même chose
Publié : ven. 12/nov./2004 18:00
par Thyphoon
au dernière nouvelle ! ça marche super si je lance un truc qui fonctionne dans une fenêtre mais si c'est en plein ecran j'ai l'erreur
j'ai essayé aussi avec ShellExecute_ ça fait pareille ...

( je comprends pas...

Publié : ven. 12/nov./2004 18:21
par filperj
Il y a le même genre de problème avec le plein écran minimisé par Alt+TAB...
Essaie de remplacer:
Code : Tout sélectionner
StartDrawing(ScreenOutput())
DrawingMode(4)
Box(10, 10, 200, 200, RGB(50, 50, 50))
StopDrawing()
par:
Code : Tout sélectionner
ScreenOutput=ScreenOutput()
If ScreenOutput And StartDrawing(ScreenOutput)
DrawingMode(4)
Box(10, 10, 200, 200, RGB(50, 50, 50))
StopDrawing()
EndIf
Tu sauteras une routine de dessin de temps en temps, mais ça devrai pas être gênant...
Publié : ven. 12/nov./2004 18:30
par Thyphoon
exelent filperj ! déjà ça plante plus !! parcontre je remarque mon ecran n'existe plus apres l'execution du runprogram ....trop curieux comme truc... Est ce qu'en utilisant runprogram le programe executer pourrais prendre le même ecran que mon programme et comme il le ferme a la fin lorsque je reviens a mon programme il n'existe plus ????
Publié : ven. 12/nov./2004 21:12
par filperj
Ah ben oui tiens, il n'existe plus du tout, apu, c'est bizarre
Reste peut-être la solution de faire un closescreen() avant le runprogram(), et de reconstruire ton écran après, même si ça ressemble à du rafistolage...
Publié : ven. 12/nov./2004 21:17
par Thyphoon
dit moi filperj ....c'est bien bug alors !! ou alors c'est vraiment moi qui est un problème ?
En tout cas merci de m'avoir aider !
je vais essayer de voir ce que donne un closescreen
et bien ça permet de revenir....mais j'ai l'impression que les constantes on perdu leur valeur ... et c'est marrant lorsque j'ouvre de nouveau l'ecran il rest en mode fenêtré .......
Ouiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiin pourquoi des que je veux faire quelques chose ça marche jammais ...

Publié : ven. 12/nov./2004 21:24
par filperj
Oui, c'est sûrement un bug.
Le prog en plein écran s'accapare toute la mémoire vidéo, ça c'est normal, mais on devrai récupérer sa part après.
Enfin, il me semble

Publié : ven. 12/nov./2004 21:35
par filperj
lorsque j'ouvre de nouveau l'ecran il rest en mode fenêtré .......
Là tu as dû t'embrouiller quelquepart...
Comme ça il va revenir un coup en plein écran, un coup en fenêtré:
Code : Tout sélectionner
#ProgramToRun = "play.bat"
#Window = 0
#Width = 640
#Height = 480
#Mode_initSp = 0 ;
;- Init DirectX
If InitSprite() = 0 Or InitSprite3D() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
CloseWindow(#Window) : End
EndIf
If #Mode_initSp = 0 Or #Mode_initSp = 1
res = OpenWindow(#Window, 0, 0, #Width, #Height, #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Arcadthy")
OpenWindowedScreen(res, 0, 0, #Width, #Height, 0, 0, 0)
Else
OpenScreen( #Width, #Height, 16, "Arcadthy" + ver$ )
EndIf
Repeat ; Jeu
ClearScreen(0, 0, 0)
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Space)
CloseScreen()
RunProgram(#ProgramToRun, "", "", 1)
If Flipaillon&1
OpenWindowedScreen(res, 0, 0, #Width, #Height, 0, 0, 0)
Else
OpenScreen( #Width, #Height, 16, "Arcadthy" + ver$ )
EndIf
Flipaillon+1
EndIf
scrop=ScreenOutput()
If scrop And StartDrawing(scrop)
DrawingMode(4)
Box(10, 10, 200, 200, RGB(50, 50, 50))
StopDrawing()
EndIf
FlipBuffers(0)
If #Mode_initSp = 0 Or #Mode_initSp = 1
While WindowEvent() : Wend ; evite le plantage clic gauche
EndIf
Until KeyboardPushed(#PB_Key_Escape)
Publié : ven. 12/nov./2004 21:55
par Thyphoon
Merci filperj avec ce que tu m'as indiqué je pense que je vais finir par y arriver ! En verité quand je disais que j'arrivais en mode fenêtré c'est qu'il ne finissait pas d'initialiser l'ecran normalement... dans le code que tu viens de poster je sais pas si tu as remarquer mais juste avant d'ouvrir la fenêtre en plein ecran tu vois une fenetre qui rempli tout l'ecran, et bien ça bloquait là ..
Je vais arrêter là pour ce soir ma tête va exploser sinon et demain je reprendrais ça a tête reposer ...
Si fred passe par là je serais interesser si il pouvait m'expliquer le fait qu'on perde l'ecran !
Publié : sam. 13/nov./2004 14:00
par Patrick88
j'ai lu quelque chose comme ça sur le forum anglais hier...
je vais essayer de retrouver
http://purebasic.myforums.net/viewtopic ... rawing+app
c'est pour la 3d,
je sais pas si ça va t'aider
pat