Gambas France BETA


Pas de compte ? Incription

Lancement qui échoue

Ce sujet est résolu.

1
AuteurMessages
Foromus#1 Posté le 26/5/2016 à 12:56:13
Bonjour à tous,

Une chose curieuse : J'ai un programme01 qui peut lancer un programme02.
J'ai donc écrit, dans mon Programme01 :

1
2
3
4
5
6
7
8
9
10
11
12
PUBLIC SUB LancerProg02()

IF NomExe <> "" THEN
EXEC [Application.Path & "/" & NomExe2]
ELSE
Message.Warning("Le programme NomExe2 est absent du répertoire"
ENDIF

WAIT 0.3
Fermer ' Prog01

END


Seulement, voilà, ça bloque, enfin, le programme s'arrête, purement et simplement, et je ne sais pas où....
J'ai donc mis des points d'arrêt, histoire de voir ce qui se passe.
Et, chose curieuse, avec les points d'arrêt, ça se passe normalement !
Du coup, je me suis dit que le µ "ne tenait pas la chopine" - j'en ai eu maintes fois l'évidence, j'ai donc semé quelques Wait 0.2 par-ci, par-là, mais ça ne change rien.
Dans la console, j'ai le message :
gbx3: warning : 1 allocation(s) non freed
Je ne vois pas trop de quoi il s'agit.
Il me semble que j'ai déjà eu un truc du genre autrefois. J'ai donc créé un exe.gambas, et là, ça tourne sans problème.
Donc, à quoi bon se casser la tête si au final, ça marche ? Sinon pour essayer de comprendre ?..

NB : Au passage, je note que dans l'aperçu, la dernière parenthèse, ligne 6, a disparu. Même constat à l'affichage définitf.
spheris#2 Posté le 26/5/2016 à 13:48:53
Foromus,

Cette ligne me choque :
1
IF NomExe <> "" THEN

car dans ton code, NomExe est comparé à 'rien'.
Pour la détection de ton exécutable, j'aurais plutot ecrit ceci :

1
2
3
4
5
6
IF Exist(Application.path & "/monexec") THEN
EXEC [Application.Path & "/" & NomExe2]
ELSE
Message.Warning("Le programme NomExe2 est absent du répertoire")
ENDIF
END


gbx3: warning : 1 allocation(s) non freed

Ce problème a été corrigé dans la nouvelle version de gb.
Quelle version utilises-tu?

NB: Au passage, j'ai mis deux parenthèses.
;)
Foromus#3 Posté le 26/5/2016 à 20:07:20
Bonjour spheris,

IF NomExe <> "" THEN
En fait, NomExe est une variable, qui contient le nom de mon programme (il peut être différent).
Après, l'expression "" n'est pas rien, mais un ensemble vide...
Du reste, j'avais bien utilisé à un moment la syntaxe classique If Exist( etc...., elle est encore dans le code, mais anesthésiée en commentaire, je pourrais, éventuellement, la ranimer, histoire de voir si ça change quelque chose, mais il se peut...
Mais ça marchait avant, il se trouve que j'ai voulu bidouiller au niveau de ma variable NomExe, c'est pour ça que je suis un peu resté interdit en voyant que ça calait.
Pour la dernière parenthèse, elle figure bien dans mon texte avant envoi !
J'utilise Gambas vers 3.8.4.

Voilà, mais je vais voir à faire la manip ce soir ou demain, ou ... + tard...

Edit à 22h
Finalement, je pense avoir +/- trouvé.
Il se trouve que mon Programme01 occupe le même sous-répertoire que le Programme02. Il se trouve aussi que je termine toujours mes programmes par une procédure qui ferme tous les formulaires, et en dernier, appelle la commande Quit. Histoire de terminer proprement.
Dans le cas qui m'occupe, lors de l'appel du 02, je ferme le 01, puisque j'en ai plus besoin. Maintenant, quand il lance le 02, le 01 tourne toujours, et attend que le 02 lui redonne la main, pour se terminer complètement. Comme les deux procédures de fin ont le même nom dans chaque application, il est possible que certaines bizarreries se produisent, interférences ou je ne sais quoi.
En fin de compte, dans mon 01, j'ai modifié le nom de la procédure de fin, et ça marche comme ça.
Pour ce qui est de NomExe <> "", je l'ai gardé malgré tout, c'est plus cohérent que le If(Exist.. en ce sens que si ma variable n'est pas renseignée, elle est forcément vide. Donc je laisse...
Merci pour l'aide !
Merci
1