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 :

[VB6] Erreur d'exécution 91


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut [VB6] Erreur d'exécution 91
    Bonjour à tous,

    J'utilise le code suivant :
    Dans une Form :
    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
    Private Sub Appels()
          Fonction1
          Call Fonction2
    End Sub
     
    Private Sub Fonction1()
          instruction1
          instruction2
          ...
          MsgBox "fin fonction1"
    End Sub
     
    Private Sub Fonction2()
          Dim i As Integer
          Dim page_temp As Page
          MsgBox "fonction2"
          ...
    End Sub
    Dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Public Type Page
        nom_page As String
        code_page As String
        width As Long
        height As Long
        mois As String
        type As String
    End Type
    Je fais appel à "Appels", la fonction 1 s'exécute bien (le message "fin fonction1" s'affiche à la fin) mais le problème c'est que le message "fonction2" ne s'affiche pas, j'obtiens l'erreur d'exécution 91 : Variable objet ou variable bloc With non définie.
    Au départ je pensais que c'était une erreur due à la déclaration de mon type Page, mais si je mets le MsgBox avant les Dim j'ai la même erreur. J'ai également fait l'expérience avec ou sans le Call, même problème.

  2. #2
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    deja le probleme viens de ta deuxieme fonction (fonction2)

    Dim page_temp As Page
    est que tu es sur que le type Page existe vraiment ??

    ou alors dans tes codes utilises tu un DataGrid ??

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    est tu sur de la ligne provoquant l'erreur ... ? que trouve t'on à la place des ...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par sovo
    est que tu es sur que le type Page existe vraiment ??
    Je l'ai déclaré comme j'ai mis au dessus, j'ai essayé de définir le type directement dans la Form mais ca change rien.

    Je n'avais pas mis le code représentant les ... car comme il n'affichait pas le MsgBox, je ne pensais pas que l'erreur pouvait venir après.

    Mais finalement, étant donné que ensuite je travaille sur le fameux type Page, je poste le code plus complet :
    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
    Private liste_page() As Page
     
    Private Sub Fonction2()
        Dim i As Integer
        Dim page_temp As Page
     
        MsgBox "trier liste pages"
     
        For i = 0 To UBound(liste_page)
            'Si le code i est supérieur au code i+1
            If liste_page(i).code_page > liste_page(i + 1).code_page Then
                'Echanger les valeurs i et i+1
                page_temp.nom_page = liste_page(i).nom_page
                page_temp.code_page = liste_page(i).code_page
                page_temp.width = liste_page(i).width
                page_temp.height = liste_page(i).height
                page_temp.mois = liste_page(i).mois
                page_temp.type = liste_page(i).type
     
                liste_page(i).nom_page = liste_page(i + 1).nom_page
                liste_page(i).code_page = liste_page(i + 1).code_page
                liste_page(i).width = liste_page(i + 1).width
                liste_page(i).height = liste_page(i + 1).height
                liste_page(i).mois = liste_page(i + 1).mois
                liste_page(i).type = liste_page(i + 1).type
     
                liste_page(i + 1).nom_page = page_temp.nom_page
                liste_page(i + 1).code_page = page_temp.code_page
                liste_page(i + 1).width = page_temp.width
                liste_page(i + 1).height = page_temp.height
                liste_page(i + 1).mois = page_temp.mois
            End If
        Next
     
    End Sub

  5. #5
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Déjà (testé), ceci marche parfaitement :

    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
    Private Sub Appels()
          Fonction1
          Call Fonction2
    End Sub
     
    Private Sub Fonction1()
     
          MsgBox "fin fonction1"
    End Sub
     
    Private Sub Fonction2()
          Dim i As Integer
          Dim page_temp As Page
          MsgBox "fonction2"
    End Sub
    et dans ton module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Public Type Page
        nom_page As String
        code_page As String
        width As Long
        height As Long
        mois As String
        type As String
    End Type
    Conclusion évidente : ce n'est pas le code que tu nous montres qui est générateur de l'e"rreur, mais un tout autre, .... que tu ne nous montres pas !!!

  6. #6
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    comme te l'a demande bbil est ce qu'on peut savoir ou se trouve exactement l'erreur c'est a dire a quel ligne le compilateur indique l'erreur (une ligne en jaune).

    PS: je repose ma question est que tu utilises un Adodc ??

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    je vois toujours pas sur quelle ligne à lieu l'erreur 91... par contre tu devrai modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For i = 0 To UBound(liste_page) -1
    afin d'éviter les débordement..

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut
    Bon alors je vais essayer de cibler plus précisément le problème.

    Tout d'abord je n'utilise pas Adodc.
    Ensuite je n'arrive pas à faire fonctionner le compilateur pas à pas pour trouver la ligne génératrice de l'erreur. En effet j'utilise une fonction d'une dll que j'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Declare Function OCRpart Lib "AspriseOCR.dll" 
    (ByVal file As String, ByVal imageType As Long, ByVal startX As Long, 
    ByVal startY As Long, ByVal width As Long, ByVal height As Long) As String
    Lorsque je souhaite exécuter l'appli directement ca me dit "Convention d'appel de DLL incorrecte", quand je créé le .exe ca me met pas cette erreur mais du coup je peine pour trouver d'où vient l'erreur 91.


    Je vous montre la fonction1, j'ai remarqué un truc bizarre :
    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
    Private Sub Fonction1()
        Dim i As Integer
        Dim Ret As String
        Dim code As String
        Dim month As String
        Dim chemin As String
        Dim fichier As String
     
        For i = 0 To UBound(liste_fichier) - 1
            Call SeparationCheminFichier(liste_fichier(i), chemin, fichier)
            DimensionsImage chemin, fichier
     
            Ret = OCRpart(liste_fichier(i), -1, width_img - 400, height_img - 200, 400, 200)
            code = Left(Ret, 8)
     
            'Insérer la nouvelle valeur dans la liste de pages
            ReDim Preserve liste_page(i + 1) As Page
            liste_page(i).nom_page = liste_fichier(i)
            liste_page(i).code_page = code
            liste_page(i).width = width_img
            liste_page(i).height = height_img
            liste_page(i).mois = "2006_07"
            liste_page(i).type = "Factures_achat"
        Next
     
        For i = 0 To UBound(liste_page) - 1
            MsgBox liste_page(i).code_page
            MsgBox liste_page(i).nom_page
            MsgBox liste_page(i).height
            MsgBox liste_page(i).width
            MsgBox liste_page(i).mois
            MsgBox liste_page(i).type
        Next
    End Sub
    La boucle des MsgBox marche très bien, c'est quand je sors de cette fonction que j'obtiens l'erreur 91 (puisque fonction2 est ignorée). J'ai fait un test en virant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Ret = OCRpart(liste_fichier(i), -1, width_img - 400, height_img - 200, 400, 200)
            code = Left(Ret, 8)
    et en mettant quelquechose comme code = i, et là je n'ai plus du totu d'erreur.

    Pourquoi OCRPart provoque une erreur "à retardement" ?

    edit : j'ai modifié le parcours des tableaux avec UBound, merci bbil

  9. #9
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Convention d'appel de DLL incorrecte
    Cela indique que les parametres donnés a la fonction ne sont pas dans le bon type

    Tant que tu auras ce message, le programme planteras, meme si la compilation ne signale pas d'erreur

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut
    Même dans le code exemple de Asprise ca me met cette erreur là.

    J'ai essayé en déclarant comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Declare Function OCRpart Lib "AspriseOCR.dll" 
    (ByVal file As String, ByVal imageType As Integer, ByVal startX As Integer, 
    ByVal startY As Integer, ByVal width As Integer, ByVal height As Integer) As String
    ou comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Declare Function OCRpart Lib "AspriseOCR.dll" 
    (ByVal file As String, ByVal imageType As Long, ByVal startX As Long, 
    ByVal startY As Long, ByVal width As Long, ByVal height As Long) As String
    Je fais toujours mes appels de fonction de la même manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Ret As String
    Ret = OCRpart(liste_fichier(i), -1, width_img - 400, height_img - 200, 400, 200)
    en définissant width_img et height_img en Long ou Integer suivant ma déclaration de fonction.
    J'ai toujours l'erreur de convention d'appel de DLL incorrecte.

    Comment est ce que je pourrai savoir quelles sont les véritables types ?
    Est ce que je peux regarder dans la DLL directement ?
    Et est ce que mon erreur 91 peut venir de là ?

  11. #11
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Le ByVal File as string est douteux

    essaye de modifier la déclaration des parametres par un ByRef File as string

    la definition as Integer serait egalement mieux avec des as Long

    ca correspondrait plus a ce qui se fait du coté des compilateurs C

    sans garantie, mais de toute façon, c'esqt la piste à suivre

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut
    J'ai essayé avec le ByRef File As String et avec des Long, mais sans succès

  13. #13
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Je verrais bien ceci comme declaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Declare Function OCRpart Lib "AspriseOCR.dll" 
    (ByRef file As String, ByVal imageType As Long, ByVal startX As Long, 
    ByVal startY As Long, ByVal width As Long, ByVal height As Long) As String
    Quand tu appelles la fonction,tu passes liste_fichier(i) en parametre qui est un variant je pense. Essaye de le stocker dans une variable tzemporaire de type string et passer cette variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim Ret As String
    Dim strTemp as String
    strTemp = liste_fichier(i)
    Ret = OCRpart(strTemp, -1, width_img - 400, height_img - 200, 400, 200)

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut
    J'avais testé cette déclaration, le ByRef marche encore moins bien que le ByVal.
    J'ai l'erreur de convention d'appel de DLL pour les deux, mais avec le ByVal, quand je compile, la fonction marche.

    J'ai déclaré liste_fichier comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private liste_fichier() As String
    C'est un tableau dynamique que je redimensionne de temps en temps par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim Preserve liste_fichier(i) As String

  15. #15
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Bon, la je seche

    Peut être pourais tu trouver la déclaration en c de la fonction ? sinon on est un peu dans le flou et reduit a deviner ce que la fonction attend réellement.
    Essaye egalement de contacter la société qui distribue cette dll

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut
    Déclaration en C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    __declspec(dllexport)  char* OCRpart( 
    char* filePath, int fileType, int startX, int startY, int width, int height);
    Donc apparemment c'est bien des integer, mais ca marche pas quand meme

    J'ai envoyé un mail à la société, on verra ce qu'ils me diront

    Sinon, pour être clair et simple :

    Ce code fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Command2_Click()
        Recuperer
    End Sub
     
    Private Sub Recuperer()
        Dim ret As String
        ret = OCR(textPath.text, -1)
        Text1.text = ret
    End Sub
    Ce code ne fonctionne pas (erreur 91)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Command2_Click()
        Recuperer
        Tester
    End Sub
     
    Private Sub Recuperer()
        Dim ret As String
        ret = OCR(textPath.text, -1)
        Text1.text = ret
    End Sub
     
    Private Sub Tester()
        MsgBox "ok"
    End Sub
    text.text = ret est bien exécuté, mais pas MsgBox "ok"

  17. #17
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Les declarion Int de C sont a traduire en long en VB
    le *Char indique qu'il faut utilise un ByRef pour le passage d'un string

    Donc il faut prototyper ta fonction comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Declare Function OCRpart Lib "AspriseOCR.dll" 
    (ByRef file As String, ByVal imageType As Long, ByVal startX As Long, 
    ByVal startY As Long, ByVal width As Long, ByVal height As Long) As String
    tu remarqueras que la fonction retourne un string

    Dans le code que tu montre, tu utilise une autre fonction : OCR avec deux parametres seulement
    ret = OCR(textPath.text, -1)
    donc tu ne montres pas tout (héhé, je suis un voyeur)

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut
    Comme je l'ai dit avant, le ByRef ne fonctionne pas (même encompilant la fonction ne fait pas ce qu'il faudrait)

    En effet je me suis mélangé entre OCR et OCRPart, mais bon ca change pas grand chose le problème est le même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Declare Function OCR Lib "AspriseOCR.dll" 
    (ByRef file As String, ByVal imageType As Long) As String
     
    Private Declare Function OCRpart Lib "AspriseOCR.dll" 
    (ByRef file As String, ByVal imageType As Long, ByVal startX As Long, 
    ByVal startY As Long, ByVal width As Long, ByVal height As Long) As String

  19. #19
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040

  20. #20
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    lol, j'ai tout faux

    Extrait du guide

    First, you need to declare the following functions exposed from the dll:

    1. Private Declare Function OCR Lib "AspriseOCR.dll" (ByVal file As
    String, ByVal imageType As Long) As String
    2. Private Declare Function OCRBarCodes Lib "AspriseOCR.dll" (ByVal
    file As String, ByVal imageType As Long) As String
    3. Private Declare Function OCRpart Lib "AspriseOCR.dll" (ByVal file
    As String, ByVal imageType As Long, ByVal startX As Long, ByVal startY
    As Long, ByVal width As Long, ByVal height As Long) As String

    Then you can start to call these functions:

    1. Private Sub Command2_Click()
    2. Dim ret As String
    3. ret = OCR(“C:\\ocr.gif”, -1)
    4. End Sub

    The code below shows a completed VB OCR demo application as shown in the figure.

Discussions similaires

  1. VB6 - Erreur en sortie d'exécutable
    Par syntax_error dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/02/2011, 12h23
  2. [VB6] E_Fail erreur d'exécution "-2147467259"
    Par gagpie dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/05/2006, 13h47
  3. [CR8][VB6] Erreur d'exécution 20533
    Par pvava dans le forum SDK
    Réponses: 1
    Dernier message: 01/02/2005, 10h27
  4. [VB6] Erreur lors de l'ouverture d'un document Word
    Par Marco le Pouillot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2003, 09h30
  5. [VB6] Erreur 9 sur redim preserve
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/10/2002, 17h29

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