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)
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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)
}
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
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
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)
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)