Utiliser une dll C sous VB6 (pb de conversion de type)

cs_sophie75 Messages postés 6 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 23 mars 2006 - 22 mars 2006 à 22:05
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 - 23 mars 2006 à 14:44
Bonjour,

Je souhaite utiliser une dll qui a été écrite en C, dans un programme
VB. Grâce à la fonction Lib, j'arrive à appeler certaines méthodes de
cette dll, mais une méthode me pose encore problème: celle-ci prend en
paramètres 2 pointeurs, sur chaîne de caractères et sur long. Si
quelqu'un pouvait me dire comment redéclarer la fonction sous VB çà me
sauverait !!



Voici le prototype de la Fonction C:

Function maFonction( long* taillemessage, char* message)



Voilà comment j'ai essayé de la déclarer sous VB mais çà ne marche pas,
il me met une erreur "types incompatibles avec la dll" au moment où je
fais appel à la fonction

Private Declare Function maFonction _


Lib "madll.dll" ( _


ByRef taillemessage As Long, _


ByVal message As String _


)

6 réponses

titi035 Messages postés 173 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 10 mai 2010
22 mars 2006 à 22:42
ça donne quoi comme erreur?
0
titi035 Messages postés 173 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 10 mai 2010
22 mars 2006 à 22:58
oups, j'avais pas lu la fin.



=> une premiere piste sur le retour de ta fontion :

Function maFonction( long* taillemessage, char* message)



Donc en vb, tu devrais avoir quelque chose comme

Lib "madll.dll" ( _

ByRef taillemessage As Long, _

ByVal message As String _

)as Function (à toi de voir le type compatible VB6..)
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
23 mars 2006 à 00:59
Salut sophie, salut titi,

je'aimerais plutôt pour savoir ce qu'est Function dans ton proto C, une structure, un handle?
Et si la valeur de retour n'est pas indispensable, pas utile de la déclarer (dans VB).

ensuite pour le long*taillemessage, je mettrais ByVal taillemessage As Long.

enfin, fais voir l'appel, c'est lui qui déclenche l'erreur (et si tu fais voir l'appel, fais voir aussi les déclarations des participants à l'appel).

a+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
cs_sophie75 Messages postés 6 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 23 mars 2006
23 mars 2006 à 12:15
Merci pour votre aide
Je vais essayer d'être un peu plus précise, j'avais en effet oublié le retour de la fonction

Fonction C:
public int maFonction(long* taillemessage, char* message)

Fonction redéclarée en VB:
Private Declare Function maFonction _
Lib "madll.dll" ( _
ByRef taillemessage As Long, _
ByVal message As String _
)
( J'ai aussi essayé de mettre taillemessage en byval, et message Byref mais toutes les combinaisons renvoient la même erreur)


Appel de la fonction en VB:
Dim iResultat as Integer
iResultat = maFonction(4, "toto")

Resultat:
Message d'erreur: Convention d'appel de la dll incorrect
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_sophie75 Messages postés 6 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 23 mars 2006
23 mars 2006 à 13:01
Décidement... j'ai de nouveau oublié le paramètre de retour dans ma fonction VB. Il s'agit donc bien de:

Fonction redéclarée en VB:
Private Declare Function maFonction _
Lib "madll.dll" ( _
ByRef taillemessage As Long, _
ByVal message As String _
) as Integer

Appel de la fonction en VB:
Dim iResultat as Integer
iResultat = maFonction(4, "toto")

Par contre, je viens de m'apercevoir qu'en mettant les 2 paramètres de la fonction en "ByVal" et en appelant la fonction comme ci-dessus, VB plante carrément et affiche le message:
Visual Basic a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru.
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
23 mars 2006 à 14:44
Sophie,

essaies de lui rajouter un vbNullChar à l'appel, à la fin de la chaine.


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
Rejoignez-nous