Bonjour,

Envoyé par
sergio_bzh
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 :
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
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
CopyMemory myROW, pMyROW, 4
Au final, l'utilisation que tu en fais revient au même mais cela peut vite induire en erreur.

Envoyé par
sergio_bzh
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 ...

Envoyé par
sergio_bzh
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.
Partager