[R] Questions sur la compilation

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

[R] Questions sur la compilation

#1

Message par caropost »

Bonjour,

Est-il possible d'inclure un script compilé dans un script compilé ?

L'idée est que j'ai Script1.au3 dans lequel je fais appel à une fonction (MyFunction()) qui se trouve dans Script2.au3. Script2 se trouve dans un dossier MyFolder et Script1 sur le bureau. Jusque là, tout va bien, ça fonctionne.
Sauf que là où ça se complique c'est que je souhaiterais compiler mes 2 scripts.

J'ai testé 2 choses : mettre en include le fichier Script2.exe et avec FileInstall. Dans 2 cas, ça ne fonctionne pas...
Avec FileInstall, le début de mon script se déroule bien jusqu'à ce que je fasse appel à MyFunction(), là, il ne la trouve pas...
De plus, ce que j'aurais aimé c'est de pouvoir mettre le chemin vers Script2.exe en variable et je sais qu'avec FileInstall le chemin de destination peut être une variable...

Donc voilà, je voulais savoir si mon idée était faisable ou non.

Merci par avance :)
Modifié en dernier par caropost le ven. 17 juil. 2015 14:49, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Questions sur la compilation

#2

Message par jguinch »

#Include sert à inclure du code depuis une source AutoIt externe (source = code non compilé) (donc il faut forcément disposer du code source)
C'est comme si, à la place de la ligne #Include, tu copiais le contenu de la source externe.
Tu n'as donc à priori besoin de compiler que le script Script1.au3.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#3

Message par caropost »

Oui, c'est bien ce qu'il me semblait mais je voulais une confirmation :)
Et je suppose que ce n'est pas que AutoIt qui veut ça mais également les autres systèmes de programmation...

Merci en tout cas :)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Questions sur la compilation

#4

Message par jchd »

Mets plutôt les fonctions communes dans un include privé que tu inclus dans chaque programme qui l'utilise.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#5

Message par caropost »

Bonjour,

J'ai vu des choses $cmdLine mais je ne comprends pas bien comment l'utiliser :oops:

J'ai Script1.au3 qui fait appel à une fonction de Script2.au3 de cette façon :

Code : Tout sélectionner

MyFunction($arg1, $arg2)
Et je souhaite compiler mes 2 scripts. Bien évidemment, Script1.exe ne peut pas accéder à MyFunction().
Je cherche à faire quelque chose du genre :

Code : Tout sélectionner

$arg = -option1 arg1 -option2 arg2
Run(Script2.exe & $arg)
Est-ce possible de faire quelque chose comme ça ?

Le but est de pouvoir donner ces 2 scripts compiler à quelqu'un pour qu'il puisse les exécuter sans modifier le contenu par accident ou en tout cas facilement (je sais que des secripts compilés peuvent être décompilés).
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Usa
Status : Hors ligne

Re: [..] Questions sur la compilation

#6

Message par TopXm »

Hello,

Oui c'est possible, (mais pas la meilleure soluce), avec quelque chose dans ce genre :
► Afficher le texteScript1
► Afficher le texteScript2
Mais tu t'ennuies pour rien autant faire comme indiqué par Jchd, tu isoles ta fonction dans un AU3 que tu inclus dans les scripts
où tu en as besoin :
► Afficher le texteMyFonction.au3
► Afficher le texteScript1
► Afficher le texteScript2
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#7

Message par caropost »

Bonjour,

Merci pour ta réponse :)

Je sais que je m'ennuie pour rien mais c'est une contrainte forte qu'on m'a demandé alors je n'ai pas spécialement le choix...
Ce qu'on m'a demandé c'est de faire Script1 qui n'est pas destiné à être modifié (sauf en cas d'évolution du script) et Script2 qui est destiné à être modifié relativement souvent.
Mon Script1 est fait de cette manière :
► Afficher le texte
Et Script2 est construit de cette manière :
► Afficher le texte
Et on m'a demandé de compiler les 2 scripts et de trouver comment je dois faire pour lancer tout ça...

Je vais tester ta solution :)

EDIT : Merci beaucoup, ça fonctionne en effet :)
Dans mon Script1, lorsque je fais appel à la fonction qui se trouve dans Script2, je mets des variables. Est-il possible de mettre plusieurs variables avec ce système ?

EDIT2 : J'ai trouvé ! :D
Dans Script1 il faut mettre :

Code : Tout sélectionner

Local $arg1 = 'MyArg1'
Local $arg2 = 'MyArg2'

ShellExecuteWait('Script2.exe', $arg1 & ' ' & $arg2)
:)
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#8

Message par caropost »

Bon en fait, avec ce que je fais, ça ne fonctionne pas totalement... J'ai 4 variables : une avec un compteur ($i de la boucle for), une qui est dans un tableau, un handle et un chemin (que je demande à l'utilisateur)...
► Afficher le texteScript1
► Afficher le texteScript2
Je n'ai pas mis tout le code mais c'est l'idée.
Sauf que lorsque je lance ça, le message suivant s'affiche :
Je lance MyFunction avec $Arg1 = , $Arg2 = , $Arg3 = E et $Arg4 = c:\Documents
Et je suis censé avoir :
Je lance MyFunction avec $Arg1 = 1, $Arg2 = E1, $Arg3 = ??? et $Arg4 = c:\Documents and Settings
(Je ne sais pas trop ce que doit afficher $Arg3 mais de toute façon il n'affiche pas le bon truc)

EDIT : je viens de voir que ça commence à poser problème lorsque je souhaite passer au minimum 3 arguments... 2 pas de soucis (mis à part mon chemin qui est considérer comme plusieurs arguments) mais avec 3 il ne garde pas en mémoire le 1er argument... Et affiche correctement mes arguments 2 et 3...

Et tant qu'on est dans les soucis : dans Script2 j'ai des fonctions qui sont du type :

Code : Tout sélectionner

Func getNom()
   return $nom
EndFunc
Je suppose que je vais également avoir quelques soucis pour récupérer les paramètres dans Script1...


EDIT2 : 1er soucis résolu : dans Script2, j'ai mis "For $I=2 to $CmdLine[0]" de lieu de laisser "$I=1" donc maintenant c'est bon, il me prend bien mes 4 paramètres ! :)
Plus qu'à voir pour soucis 2 ($Arg4 = variable chemin avec espace) et soucis 3 (récupérer les variables contenues dans les fonctions get de Script2 parce que je suppose que je ne peux pas les récupérer de la même manière...)
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Usa
Status : Hors ligne

Re: [..] Questions sur la compilation

#9

Message par TopXm »

Re :)

Pour ton problème d'argument avec des espaces, il te suffit de délimiter tes arguments avec des guillemets.

Code : Tout sélectionner

ShellExecuteWait('Script2.exe ', '"' & @ProgramFilesDir  & '"  "Argument avec espace"')
Par contre c'est quoi ton souci 3 ?

[EDIT]Je crois que j'ai capté ton souci. J'ai modifié Script2 pour qu'il gère 4 paramètres :
► Afficher le texteScript2
Après il te faut juste passer les bons arguments au bon endroit :
► Afficher le texteScript1
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Questions sur la compilation

#10

Message par orax »

Je ne sais pas quels sont tes besoins exacts mais si l'ordre des arguments peut varier, comme script2.exe -couleur bleu -a -i -x et script2.exe -a -couleur rouge alors regarde https://www.autoitscript.com/forum/topi ... tenceflag/
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#11

Message par caropost »

TopXm a écrit :Re :)

Pour ton problème d'argument avec des espaces, il te suffit de délimiter tes arguments avec des guillemets.

Code : Tout sélectionner

ShellExecuteWait('Script2.exe ', '"' & @ProgramFilesDir  & '"  "Argument avec espace"')
Par contre c'est quoi ton souci 3 ?

[EDIT]Je crois que j'ai capté ton souci. J'ai modifié Script2 pour qu'il gère 4 paramètres :
► Afficher le texteScript2
Après il te faut juste passer les bons arguments au bon endroit :
► Afficher le texteScript1
Re :)
Merci ! :D Je le savais qu'il y avait besoin de guillemets mais la chaleur a due me ramollir le cerveau hier, j'ai eu une illumination ce matin avant d'avoir fini de lire ton message ^^ Et le le finissant, j'ai vu que c'était la même idée :)

Plus qu'à voir comment passer des variables de Script2 à Script1 :)

@Orax : Merci, je vais regarder ça :)
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#12

Message par caropost »

Je ne m'en sors pas trop avec ce que tu as donné Orax :/ :oops:

J'ai essayé plusieurs façons sans résultat...
► Afficher le texteScript1
► Afficher le texteScript2
Avec l'UDF du lien, j'ai essayé _CmdLine_Get et _CmdLine_GetValByIndex, j'ai essayé de modifier un peu ces UDF sans résultat probant...
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#13

Message par caropost »

Bonjour,

Je me suis peut-être un peu compliqué la vie mais j'ai trouvé un moyen de récupérer mes variables de Script2 dans Script1 :) Je regarde le 1er argument et en fonction de ce que c'est, j'envoie ma fonction MyFunction(), nom() ou encore getInfo() :) J'ai dû changer les return en Send mais bon...
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#14

Message par caropost »

Bonjour,

J'ai un petit soucis que je ne comprends pas...

J'utilise le plinkwrapper de cette page : https://www.autoitscript.com/forum/topi ... ntry890269
Dans Script1.au3 et dans Script2.au3, j'ouvre un fichier de log (pas le même) pour enregistrer ce qu'il se passe sur le terminal. Jusque là, ça fonctionne. Là où ça se corse c'est après avoir compilé mes scripts...

Le fichier de log que j'ouvre dans Script1.exe fonctionne bien mais pas celui du fichier de log dans Script2.exe. Et pourtant, j'ai fais un pur copier/coller... J'ai essayé de fermer le handle, de mettre un sleep pour le cas où ça ne prendrait pas en compte la fermeture tout de suite, j'ai changé de dossier le 2ème fichier de log, j'ai même mis en commentaire la ligne qui ouvre mon 1er fichier de log mais rien à faire... Le fichier se créer bien au bon endroit mais rien n'écrit à l'intérieur...

J'ai essayé plusieurs "versions".
► Afficher le texteScript1.exe qui fonctionne
► Afficher le texteScript2.exe qui ne fonctionne pas totalement
Est-ce que vous auriez une idée du pourquoi je n'arrive pas à écrire dans mon second fichier de log ?
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Questions sur la compilation

#15

Message par orax »

S'il est possible d'exécuter le Script2 depuis SciTE (sans le compiler en .exe), alors ajoute ça au début du script :

Code : Tout sélectionner

#AutoIt3Wrapper_Run_Debug_Mode=Y
Si une erreur est passée inaperçue, elle se verra avec ça (le code d'erreur sera affiché).

(Comme alternative il y a aussi... menu Tools > Trace: Add trace lines.)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#16

Message par caropost »

Merci :)
Je n'ai pas vu de bug... J'ai ajouté dans Script2.au3 une ligne d'appel à la fonction avec les paramètres souhaités pour que cela fonctionne.

Voici ce qui était marqué dans le SciTE :
► Afficher le texte
C'est là qu'effectivement il doit y avoir un problème mais je ne comprends pas parce que j'ai vraiment c/c la ligne qui l'initialise... J'ai également les mêmes fichiers inclus qui sont utiles dans les 2 scripts...
Modifié en dernier par caropost le mer. 08 juil. 2015 09:12, modifié 1 fois.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Questions sur la compilation

#17

Message par orax »

caropost a écrit :J'ai ajouté dans Script2.au3 une ligne d'appel à la fonction avec les paramètres souhaités pour que cela fonctionne.
Depuis SciTE, menu View > Parameters pour simuler un passage de paramètres en ligne de commande.

Le fichier de log pour Script2 se trouve-t-il dans un dossier "spécial" tel que sur le bureau ou dans un dossier du bureau ? Car @DesktopDir <> @DesktopCommonDir. http://autoitscript.fr/forum/viewtopic. ... 233#p89233
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#18

Message par caropost »

Les fichiers de log sont enregistrés dans un dossier "Logs" qui se trouve sur le bureau. Je n'utilise pas @DesktopDir et @DesktopCommonDir, je mets le chemin en dur dans le script (dans une variable mais je défini le chemin au début). Les fichiers se créent bien au bon endroit, c'est l'écriture à l'intérieur qui ne se fait pas... Script2 se trouve dans le dossier "File" qui se trouve sur le bureau mais ça ne fonctionne pas, que j'enregistre le fichier de logs dans "Logs", "File" ou directement sur le bureau...

J'ai essayé comme tu m'as dit : simuler des paramètres dans le menu View mais cela n'a rien donné...
► Afficher le texte
EDIT : J'ai essayé avec @DesktopDir et @DesktopCommonDir et ça ne fonctionne pas mieux (le fichier se créer bien au bon endroit mais rien ne s'inscrit dedans)
caropost
Niveau 4
Niveau 4
Messages : 63
Enregistré le : jeu. 19 mars 2015 16:24
Status : Hors ligne

Re: [..] Questions sur la compilation

#19

Message par caropost »

Personne n'a d'idée ? :(

EDIT : problème résolu, des variables que j'avais oublié de reporter dans Script2 -_-
Répondre