OVH Cloud OVH Cloud

Parametres Dll

2 réponses
Avatar
JGP_NoMail
bonjour (re)


Appel de dll avec des chaine, sa marche, mais quel type utiliser
pour des parametres unsigned long, pointeur, ou tableau de bytes ?
exemple :




/***** SOURCE VB ************/
Declare Sub MyFunction Lib "madll.dll" _
Alias "MyCfunction" ( _
ByVal ParamUnsignedlong As ???_
ByVal ParamUnsignedlong As ???_
ByVal ParamUnsignedcharTab As ??? ) as long

Dim tableau(7) As Byte
Dim nb1 as long
dim nb2 as long

i = MyFunction ( nb1, nb2, tableau)


/***** SOURCE C ************/
__declspec(dllexport) long MyCfunction(
unsigned long param1,
unsigned long *param2,
unsigned char Tab[] )
{
...
return(0)
}


JGP

2 réponses

Avatar
Zoury
Salut!

pour des parametres unsigned long, pointeur, ou tableau de bytes ?



dans le cas du unsigned long param1,
- ByVal As Long

dans le cas du unsigned long *param2,
1. ByRef As Long, car tu sais qu'il s'agit d'un long*, sinon il existe ByRef
As Any qui permet de passer un pointeur (type indéfinie), c'est surtout
utilisé pour passé des structures.
2. ByVal As Long, dans ce cas, tu devras passer explicitement le *pointeur*
de ta variable avec VarPtr().

dans le cas du unsigned char Tab[],
- ByVal As String, tu devras probablement remplir ta chaine avant l'appel
(créer un buffer) si tu veux que ça fonctionne.


__declspec(dllexport) long MyCfunction(



Note que VB 6.0 ne supporte que les fonctions externes utilisant la
convention d'appel __stdcall.

--
Cordialement
Yanick
MVP pour Visual Basic
/***** SOURCE VB ************/
Declare Sub MyFunction Lib "madll.dll" _
Alias "MyCfunction" ( _
ByVal ParamUnsignedlong As ???_
ByVal ParamUnsignedlong As ???_
ByVal ParamUnsignedcharTab As ??? ) as long

Dim tableau(7) As Byte
Dim nb1 as long
dim nb2 as long

i = MyFunction ( nb1, nb2, tableau)


/***** SOURCE C ************/
__declspec(dllexport) long MyCfunction(
unsigned long param1,
unsigned long *param2,
unsigned char Tab[] )
{
...
return(0)
}


JGP


Avatar
JGP_NoMail
Le 22/03/2005 23:07, Zoury a écrit :
Salut!


Bonjour,

dans le cas du unsigned long param1,
- ByVal As Long



Ok, mais dans ce cas je suppose que
(unsigned) | long | hex
2147483648 = -2147483648 = 0x8000000
4294967295 = -1 = 0xffffffff

Je vais tester le resultat si mes calcul sont fait sur un décimal
converti en long ex :
dim a as decimale
dim b as long
dim c as long
dim tableau as string

a = 4294967295
b = a
i = MyFunction ( b, c, tableau)

Jgp