IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Le programme EXE se plante alors qu'il fonctionne dans l'environnement VB6


Sujet :

VB 6 et antérieur

  1. #1
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 634
    Points : 1 161
    Points
    1 161
    Par défaut Le programme EXE se plante alors qu'il fonctionne dans l'environnement VB6
    Bonjour,

    Je développe des routines pour accéder au registre de Windows (Lecture/Ecriture des données, Création/Suppression des clefs, Enumération des clefs et des noms des data etc) . Et si ça marche bien dans l'environnement VB6, le programme compilé en EXE se plante uniquement dans l’accès à la fonction RegEnumValue pour lister le nom des datas qui sont dans une clef et qui me retourne une erreur 87 qui correspond à "87(&H57): Paramètre incorrect".
    J'ai tenté les compilations "optimiser la rapidité du code", "optimiser la taille du code", "pas d'optimisation" pas de changement
    Je suis en VB6 Entreprise et W10 32bits
    Voici mon code (partiel):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Option Explicit
    ..........
    Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hkey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long 
    ...........
     
    Public Function EnumerationValue(Root&, CheminFind$, Mode As Boolean) As String
        Dim valuename As String     ' name of the value being retrieved
        Dim valuelen As Long        ' length of valuename
        Dim datatype As Long        ' receives data type of value
        Dim data(0 To 254) As Byte  ' 255-byte data buffer for read information
        Dim datalen As Long         ' size of data buffer information
        Dim datastring As String    ' will receive data converted to a string, if necessary
        Dim hkey As Long            ' handle to the registry key to enumerate the values of
        Dim Index As Long           ' counter for the index of the value to enumerate
        Dim c As Long               ' counter variable
        Dim retval As Long          ' functions' return value
        Dim CadrageNom%
        Dim CadrageVal%
        Dim ListeClef$
        ListeClef$ = ""
        ' Open the registry key to enumerate the values of.
        retval = RegOpenKeyEx(Root&, CheminFind$, 0&, KEY_QUERY_VALUE, hkey)
        ' Check to see if an error occured.
        If retval <> 0 Then
    '        Debug.Print "Registry key could not be opened -- aborting."
            EnumerationValue = "? (Listage nom) Il est impossible d'ouvrir la clef !"
            Exit Function ' abort
        End If
     
        ' Begin enumerating the values.  Get each one, displaying its name.  If it's a null-
        ' terminated string or binary data, display it.  If not, say so.
        Index = 0  ' initialize the counter
        While retval = 0  ' loop while successful
            ' Initialize the value name buffer.
            valuename = Space(255)  ' 255-space buffer
            valuelen = 255  ' length of the string
            datalen = 255  ' size of data buffer
            ' Get the next value to be enumerated
    RegistreRW!Espion.AddItem "hkey =" & Format$(hkey)
    RegistreRW!Espion.AddItem "Index =" & Format$(Index)
    RegistreRW!Espion.AddItem "valuename =" & valuename
    RegistreRW!Espion.AddItem "valuelen =" & Format$(valuelen)
    RegistreRW!Espion.AddItem "datatype =" & Format$(datatype)
    RegistreRW!Espion.AddItem "data(0) =" & Format$(data(0))
    RegistreRW!Espion.AddItem "datalen =" & Format$(datalen)
            retval = RegEnumValue(ByVal hkey, ByVal Index, ByVal valuename, valuelen, &H0, datatype, data(0), datalen)
    RegistreRW!Espion.AddItem "RegEnumValue =" & Format$(retval)
            If retval = 0 Then   ' if successful, display information
    Pour analyser le problème, j'ai ajouté un objet Espion qui est une ListBox (voir les différences d'espionnage en PJ entre les deux exécutions en EXE et en VB6)

    Si quelqu'un a une idée sur la cause de ce problème ou peut me donner des pistes d'investigation ? Perso, ma boule de cristal ne répond plus !

    Merci d'avance
    Daudet
    Images attachées Images attachées   

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 172
    Points
    17 172
    Par défaut
    Salut

    Juste pour voir, as tu essayé en choisissant un mode de compatibilité?
    Je soupçonne que l'éditeur VB6 tu le lances en tant qu'administrateur avec compatibilité, dans ce cas le run hérite des bons paramètres, par contre l'exécutable lui, tu dois le paramétrer pour qu'il ne bug pas.
    Bouton droit sur le fichier .exe ==> Résoudre les problèmes de compatibilité ==> ....., pour le reste tu dois connaitre la suite.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 634
    Points : 1 161
    Points
    1 161
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    Juste pour voir, as tu essayé en choisissant un mode de compatibilité?
    J'ai testé le mode administrateur , compatibilité W8 .... que dalle !
    Par contre tu m'as donné une idée, je vais transférer le programme sur un PC en W7 et voir ... mais ça va prendre un peu de temps. Je peux aussi redescendre à XP !
    Merci .. Wait and see!
    Daudet

  4. #4
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 634
    Points : 1 161
    Points
    1 161
    Par défaut
    Premier test avec W7 32bits
    L'erreur 87 sur RegEnumValue se produit maintenant dans l'environnement VB6 . J'ai laissé pissé le mérinos car il y a un autre problème qui m'a occupé ce W.E.

    En effet, le reste de mon programme (qui est OK en W10 32bits) se comporte bizarrement ! Les symptômes ? Quand j'écris une valeur de donnée, il me répond OK, mais, avec RegEdit, je ne vois rien du tout .
    Une recherche sur la valeur de la donnée écrite me la trouve, non pas dans HKEY_LOCAL_MACHINE mais dans HKEY_USERS ou il y a une copie de mes clefs d'origine (VirtualStore).
    - Si je lis une valeur de donnée, il me la cherche dans HKEY_USERS , si il ne la trouve pas, il me donne la valeur trouvé dans HKEY_LOCAL_MACHINE
    - Si j'écris une valeur de donnée, il me la met dans HKEY_USERS
    NB : Je pense que c'est une protection des valeurs d'origine, un utilisateur modifie/utilise uniquement celles qui le concernent . Pourquoi je n'ai pas eu ce gag en W10 ? Mystère .

    Nom : Sans autorisation.jpg
Affichages : 109
Taille : 63,2 Ko

    En fait, après de longues recherches, c'est un problème d'autorisation et de propriétaire.
    En déclarant, (je l'ai fait avec RegEdit, mais on devrait pouvoir le faire avec une API ? ), que c'est moi le proprio, ça remarche !

    Nom : Autorisation.JPG
Affichages : 103
Taille : 116,6 Ko

    La suite au prochain numéro ...

Discussions similaires

  1. Appel d'un programme *.exe
    Par kroma23 dans le forum Débuter
    Réponses: 5
    Dernier message: 25/10/2007, 18h49
  2. Prendre un algorithme depuis un programme .exe
    Par ..::snake::.. dans le forum x86 32-bits / 64-bits
    Réponses: 10
    Dernier message: 21/05/2007, 17h07
  3. executer un programme *.exe
    Par CLion dans le forum MFC
    Réponses: 5
    Dernier message: 10/11/2006, 00h20
  4. Réponses: 2
    Dernier message: 30/01/2006, 22h19
  5. .exe qui plante sur d'autres PC ????????
    Par OutOfRange dans le forum Langage
    Réponses: 1
    Dernier message: 02/11/2005, 22h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo