Passage d'une structure àune Dll

kantelise Messages postés 2 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 27 avril 2006 - 27 avril 2006 à 20:07
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 27 avril 2006 à 21:21
Bonsoir a tous,
J'ai crée une dll en c que je souhaite utiliser sous Vb. Voici la declaration de ma dll sous vb:
Private Type variete
nom As String * 21
topt As Single
tbase As Single
tsum As Single
cpp As Single
bvp As Single
toptm As Single
cdrm As Single
tcritc As Single
tcrith As Single
tcritd As Single
End Type

Public Declare Function dllecrire Lib "win.dll" Alias"parametre" (var1 As variete, var2 As variete) As Integer

Pour l'appel voici ce que je fais:
retour = dllecrire(var1, var2)

Mais voici le message affiché:type d'arguments byref incompatibles

Pouvez vous m'aider?

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 avril 2006 à 20:20
Salut
Il faut préciser dans la déclaration si les arguments doivent être passé ByRef (c'est par défaut, mais mieux vaut le préciser)
Pour un passage de variables complexe, il faut impérativement dimensionner les variables passées avant l'appel (je pense que tu l'as fait, mais pas précisé)
La définition de ton Type est Private et la déclaration de ta Function est Public : Essaye d'uniformiser.

Si ça n'a rien résolé, copie/colle nous les quelques lignes de ton code

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 avril 2006 à 20:21
"résolé" = résolu
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
27 avril 2006 à 20:37
Jusqu'ici ton code semble tout à fait correct. Je ne vois à priori aucun soucis.

Le problème doit venir de la dll.
Comment est définie la fonction "parametre" dans ta dll ? peut-tu nous donné ce bout de code, stp?

Et donne aussi la définition de la structure dans ta dll. Pour moi le blême vient de la dll.

un problème de definition des parametre dans la fonction,
ou un probleme de définition de la structure,
ou peut-etre bien un problème de _stdcall, why not

0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
27 avril 2006 à 20:52
dans le : retour = dllecrire(var1, var2), de quel type sont var1 et var2 ? Il faut absolument que ce soit des instances de ton type de données !

_
Avant de poster dans le forum,
prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx
<s></s>
0

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

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
27 avril 2006 à 21:11
regarde aussi la longueur de ta zone:


LenB(var1) = 84    ' 2*21 + 2 + 10*4
il y a 2 octets en plus entre nom et topt à cause du cadrage sur 4

Daniel
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 avril 2006 à 21:21
Tout à fait juste, à moins d'un:
#pragma pack(1) entourant la def de ta structure en C, ton compilo aura rectifié 'nom' correctement en char[24].

ciao...
BruNews, MVP VC++
0
Rejoignez-nous