[R] Erreur après compilation (Subscript used on...)

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

[R] Erreur après compilation (Subscript used on...)

#1

Message par mica2727 »

Bonjour à tous

Encore un problème et oui... décidément ce programme ne veut pas se finir.
Donc toujours sur mon installateur j'utilise l'UDF 7zip.

Quand je teste sans compilation .exe le programme se lance, et s'extrait.
Quand je compile, le programme me renvoie : Error: Subscript used on non-accessible variable.

J'ai fais tout un truc avec des MessageBox pour déterminer et cerné l'erreur et je l'ai trouvé, mais aucune idée du problème.

Code : Tout sélectionner

$zipList = _7ZipGetFilesList(0, $ArcFile)
Cette fonction renvoie la liste des fichiers dans le .zip
Mais quand je compile, et j'ai testé avec un _ArrayDisplay(), l'array display ne s'affiche même pas.

Et ça fait 2jours que j'y passe dessus, je comprends vraiment pas l'erreur, pourquoi en normal ça fonctionne et une fois compilé non. :?:
Modifié en dernier par mica2727 le ven. 30 oct. 2015 19:26, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Erreur après compilation (Subscript used on...)

#2

Message par Tlem »

La dll 7Zip ne doit probablement pas être au bon endroit. ;)

Vous devez l'inclure dans la compilation de votre script avec Fileinstall en dirigeants l'extraction dans le temps utilisateur. Ensuite dans votre script, récupérez et utilisez le handle de celle-ci.
Autre solution : Rediriger le Fileinstall de la dll là où vous avez votre script. Mais parfois cette méthode peux poser problème comme par exemple si le script est sur un ressource réseau.

Pour les mêmes raisons données dans ma dernière expliquation, je vous conseille de décompresser votre zip dans le temps de l'utilisateur. :)

Envoyé de mon appareil mobile avec Tapatalk.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Erreur après compilation (Subscript used on...)

#3

Message par mica2727 »

C'est 7Zip.au3 qui inclut la DLL, et il y a un FileInstall déjà dedans. Sa se fait automatiquement, mais c'est vrai il faudrait que je vérifie si la DLL est bien "extraite" et utiliser, car je teste dans le même dossier...

Je vais voir ça, et pour l'idée de l'extraction, en fait, l'utilisateur choisit un dossier temporaire (D:\Internet) et un dossier d'installation.

Mon programme, s'occupe de télécharger et placer les fichiers dans le dossier D:\Internet, puis de l'extraire directement dans le dossier de son choix. Avec callback et barre de progression d'extraction, qui fonctionne très bien quand ce n'est pas compilé.

Enfin bref, je vous tien au courant.
Merci une seconde fois Tlem.

EDIT: Vous avez raison, les DLL ne sont pas extraite. Je sais donc comment faire, merci :)
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Erreur après compilation (Subscript used on...)

#4

Message par mica2727 »

Encore moi..

Je viens de tester avec _GetZipListExample, j'ai remis le 7Zip.au3 d'origine, et j'ai compilé en X86 : Sans résultat.
Je teste alors en X64 et l'architecture de mon .Zip s'affiche.
Je pensais que le X64 pouvait lire le X64 et X86 non?

Le programme fonctionne à 100% en x64...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Erreur après compilation (Subscript used on...)

#5

Message par Tlem »

Si vous essayez le script compilé x86 sur une machine x86 est-ce que ça fonctionne ?

Envoyé de mon appareil mobile avec Tapatalk.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Erreur après compilation (Subscript used on...)

#6

Message par mica2727 »

J'ai pas de machine x86...
C'est bien le soucis, mon pc portable s'est en x64 et mon pc fixe en x64...

Et je crois qu'il y a un bug dans 7Zip, j'ai vu que certain mettent : @ArchAutoItx64 un truc comme ça. Au lieu de @OSArch...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Erreur après compilation (Subscript used on...)

#7

Message par Tlem »

pour tester sous x86, créez vous une machine virtuelle avec un vieux XP.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Erreur après compilation (Subscript used on...)

#8

Message par mica2727 »

Euh, et je trouve comment un vieux XP ?

J'ai trouvé le problème !
En fait ça utilise : @OSArch, et en cherchant dans les macros autoit elle existe pas.
C'est @ProcessorArch la nouvelle. C'est pour ça qu'il fonctionne pas, il trouve pas la bonne DLL et donc il plante.

Donc bref, j'ai remplacé @OSArch par @ProcessorArch.

Je reteste...
Modifié en dernier par mica2727 le ven. 30 oct. 2015 18:37, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Erreur après compilation (Subscript used on...)

#9

Message par Tlem »

Sur la toile vous trouverez votre bonheur. ^^

Envoyé de mon appareil mobile avec Tapatalk.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Erreur après compilation (Subscript used on...)

#10

Message par mica2727 »

J'ai amélioré le code source de 7Zip.au3, du moins pour l'ouverture de la DLL.

Code : Tout sélectionner

Func _7ZipStartup()
    If Not @Compiled Then ; If not compiled, test and open the right dll
        If Not FileExists($sNoCompiledPath & $sZip32Dll) And _
           Not FileExists($sNoCompiledPath & $sZip64Dll) Then Return SetError(2, 0, 0)
        If @ProcessorArch = "X86" Then
            $hDLL_7ZIP = DllOpen($sNoCompiledPath & $sZip32Dll) ; Open x32 dll from no compiled path
        Else
            $hDLL_7ZIP = DllOpen($sNoCompiledPath & $sZip64Dll) ; Open x64 dll from no compiled path
        EndIf
    Else ; If compiled, test and open the right dll (that must be in ScriptDir for compiling)
        If @ProcessorArch = "X86" Then
            If Not FileInstall("7-zip32.dll", $sCompiledPath & $sZip32Dll, 1) Then Return SetError(3, 0, 0)
            $hDLL_7ZIP = DllOpen($sCompiledPath & $sZip32Dll) ; Open x32 dll from FileInstall path
        Else
            If Not FileInstall("7-zip64.dll", $sCompiledPath & $sZip64Dll, 1) Then Return SetError(3, 0, 0)
            $hDLL_7ZIP = DllOpen($sCompiledPath & $sZip64Dll) ; Open x64 dll from FileInstall path
        EndIf
    EndIf
    If $hDLL_7ZIP = -1 Then Return SetError(1, 0, 0) ; If no dll handle, return error
    Return 1
EndFunc   ;==>_7ZipStartup
Si on regarde bien, avant le @ProcessorArch c'était @OSArch, qui n'existe plus.
Donc quand je lance la version X64, la valeur retourne 0, donc il prends la seconde condition qui est la DLL x64. Donc en fait ça fonctionne.
Et quand on lance la version x86, il prend aussi la seconde valeur puis-ce qu'il ne connaissait pas @OSArch, et il charge la DLL x64 qui forcément ne passe pas sous x86. Et donc le programme plante.

J'espère que c'est ça mais je suis quasiment sur ^^

EDIT : Après quelque corrections supplémentaire, le programme fonctionne à 100%, et même la version x86 fonctionne (j'ai regardé sur le gestionnaire des taches il y a bien *32) à la fin de mon programme.

Je suis super content. Je vais pouvoir ajouté les clés dans le registre.
Merci à vous !!!

Et ce que vous savez pas c'est que des fois j'écris un sujet et en l'écrivant je trouve la réponse xD

PS: Parcontre la programmation nuit gravement à la tête :lol:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Erreur après compilation (Subscript used on...)

#11

Message par Tlem »

Le "problème" des UDFs ou fonctions disponibles sur le forum, c'est qu'elles sont écrites à un instant T avec la version en cours d'AutoIt. Malheureusement lorsque AutoIt évolue, les fonctions elles restent tel quel. Il faut donc parfois adapter le code avec les nouveaux changements et là difficile de gérer ce genre de choses. ^^

Envoyé de mon appareil mobile avec Tapatalk.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre