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 et libmysql : Bad DLL calling convention


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 41
    Par défaut VB6 et libmysql : Bad DLL calling convention
    Bonjour,

    je suis en train de démarrer une appli avec accès à une base MySQL. J'ai donc récupéré le libmysql.dll de la distrib 5.1 afin d'utiliser la méthode à Romain :
    http://rp.developpez.com/vb/tutoriels/mysql/

    Problème : j'ai une erreur "Bad DLL calling convention" lors de l'appel à l'API CopyMemory.
    Cette API est indispensable pour pallier l'absence de pointeurs en VB6.
    J'ai également essayé avec la distrib libmysql en 4.1 : même chose.

    Si dans l'appel je supprime le "ByVal" j'ai un plantage VB.

    Voici le code avec en rouge , l'appel qui plante :

    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
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, _
        Source As Any, ByVal Length As Long)
    
    Private Sub EnumTables(pMySQL As Long)
       Dim pMyROW As Long, myROW As Long, pMyRES As Long, i As Long
       pMyRES = mysql_list_tables(pMySQL, "")
       If (pMyRES <> 0) Then
           For i = 0 To mysql_num_rows(pMyRES) - 1
               pMyROW = mysql_fetch_row(pMyRES)
               CopyMemory myROW, ByVal pMyROW, 4
               msgbox CopieChaine(myROW)
           Next
           mysql_free_result (pMyRES)
       End If
    End Sub
    J'ai bien trouvé une explication ici :
    http://vcfaq.mvps.org/il/2.htm
    mais je dois dire que je ne suis pas plus avancé.

    Si qqun a une solution , merci !

    Sergio

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si dans l'appel je supprime le "ByVal" j'ai un plantage VB.
    Et pourqoui tu veux supprimer ce ByVal ?

    Sans connaitre la dll, il est difficile de deviner ce que tu veux faire avec ce copymemory. D'ou sort tu cette routine? Si c'est d'un exemple que tu as trouvé , vérifie soigneusemet comment a été définie l'api copymemory.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 41
    Par défaut
    Citation Envoyé par Delbeke Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si dans l'appel je supprime le "ByVal" j'ai un plantage VB.
    Et pourqoui tu veux supprimer ce ByVal ?

    Sans connaitre la dll, il est difficile de deviner ce que tu veux faire avec ce copymemory. D'ou sort tu cette routine? Si c'est d'un exemple que tu as trouvé , vérifie soigneusemet comment a été définie l'api copymemory.
    Merci pour les réponses mais pour résumer :

    * la DLL libmysql vient du site mysql
    * le code, sans aucune retouche, vient du présent site, écrit par Romain
    * Si je laisse ByVal j'ai une erreur "Bad DLL ...."
    * si je supprime ByVal j'ai un plantage VB (sortie immédiate de Visual Studio)

    Je vais essayer avec le ByVal dans la décla.

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Bonjour,
    Citation Envoyé par sergio_bzh Voir le message
    Bonjour,

    je suis en train de démarrer une appli avec accès à une base MySQL. J'ai donc récupéré le libmysql.dll de la distrib 5.1 afin d'utiliser la méthode à Romain :
    http://rp.developpez.com/vb/tutoriels/mysql/

    Problème : j'ai une erreur "Bad DLL calling convention" lors de l'appel à l'API CopyMemory.
    .../...
    J'ai également essayé avec la distrib libmysql en 4.1 : même chose.

    Si dans l'appel je supprime le "ByVal" j'ai un plantage VB.

    Voici le code avec en rouge , l'appel qui plante :

    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
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, _
        Source As Any, ByVal Length As Long)
    
    Private Sub EnumTables(pMySQL As Long)
       Dim pMyROW As Long, myROW As Long, pMyRES As Long, i As Long
       pMyRES = mysql_list_tables(pMySQL, "")
       If (pMyRES <> 0) Then
           For i = 0 To mysql_num_rows(pMyRES) - 1
               pMyROW = mysql_fetch_row(pMyRES)
               CopyMemory myROW, ByVal pMyROW, 4
               msgbox CopieChaine(myROW)
           Next
           mysql_free_result (pMyRES)
       End If
    End Sub
    .../...
    La déclaration correcte de Copymem est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, _
        Byval Source As Any, ByVal Length As Long)
    et l'appel de la fonction devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CopyMemory myROW, pMyROW, 4
    Au final, l'utilisation que tu en fais revient au même mais cela peut vite induire en erreur.

    Citation Envoyé par sergio_bzh Voir le message
    .../...J'ai bien trouvé une explication ici :
    http://vcfaq.mvps.org/il/2.htm
    mais je dois dire que je ne suis pas plus avancé. .../...
    Cela n'a rien à voir si tu emploies la librairie dédiée à windows
    maintenant si tu utilises la librairie d'origine GNU/Linux, il ne faut pas être surpris ...
    Citation Envoyé par sergio_bzh Voir le message
    Cette API est indispensable pour pallier l'absence de pointeurs en VB6.
    Si tu avais fait une recherche dans les forums VB avec le mot clé «Pointeur»,
    il est certain que tu n'affirmerais pas cette ânerie. Non documentés, voir méconnus ne signifie pas absents.

Discussions similaires

  1. Bad DLL Calling convention
    Par zizoufoot dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/05/2012, 22h11
  2. [VB6] Débugage d'une DLL Active X
    Par drinkmilk dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/05/2006, 14h49
  3. [VB6]comment créer une dll
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/04/2006, 14h32
  4. [VB6] Problème d'installation (DLL?)
    Par abelman dans le forum Installation, Déploiement et Sécurité
    Réponses: 7
    Dernier message: 20/02/2006, 11h30
  5. [VB6] Comment faire une dll classique ?
    Par doudoustephane dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 05/01/2006, 13h34

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