OVH Cloud OVH Cloud

Pb Byref avec Dll ( plus propre )

2 réponses
Avatar
Jean Francois
Bonjour

Malgre mes recherches dans les anciennes question du meme=20
type je n ai pas trouve la solution a mon probleme.

J ai cree une dll et lorsque je veux l utiliser j ai le=20
message suivant Type d argument ByRef imcompatible.

Voici le detail

Dans une Dll qui se nomme MaDll.dll j ai un module calcul=20
qui contient par exemple la fonction suivante=20

--------------

Public Function TTC(Prix As Long, TVA As Long) As Long
TTC =3D Prix + (Prix * TVA) / 100
End Function


-------------

Dans mon .exe

Je declare ma Dll dans un module

-------------
Declare Function TTC Lib "MaDll.dll" (Prix As Long, TVA As=20
Long) As Long
---------------

Dans mon Form sur click j ai

-----------------------

Public cl1 As Calcul

Private Sub Command1_Click()
Set cl1 =3D New Calcul
Prix =3D 100
TVA =3D 20
MsgBox cl1.TTC(Prix, TVA)

End Sub
--------------

Si j execute j ai le message =AB Type d argument ByRef=20
imcompatible =BB

Si j ajoute dans ma private sub

Dim Prix as long
Dim TVA as long

Ca passe mais ca ne me semble pas etre la bonne solution.

Quelqu un peut il me dire ou est mon probleme et comment=20
le resoudre

Merci d’avance pour votre aide

Jean fran=E7ois

2 réponses

Avatar
François Picalausa
Bonjour/soir,
"Jean Francois" a écrit dans le message de
news:058501c3a6ca$62bddb00$
J ai cree une dll et lorsque je veux l utiliser j ai le
message suivant Type d argument ByRef imcompatible.

Voici le detail

Dans une Dll qui se nomme MaDll.dll j ai un module calcul
qui contient par exemple la fonction suivante

--------------

Public Function TTC(Prix As Long, TVA As Long) As Long
TTC = Prix + (Prix * TVA) / 100
End Function


-------------

Dans mon .exe

Je declare ma Dll dans un module

-------------
Declare Function TTC Lib "MaDll.dll" (Prix As Long, TVA As
Long) As Long
---------------




Les Dll créées par VB sont des composants COM qui ne sont pas utilisables
via la syntaxe Declare Function...

Pour utiliser un tel objet, dans les références, ajoute ton projet.
Ensuite, par défaut :
Dim MonObjet As ProjetDLL.MaClasse
Set MonObjet = New ProjetDLL.MaClasse
Msgobx MonObjet.TTC (...)
Set MonObjet = Nothing

Autre possibilité, faire du late-binding via CreateObject:
http://faq.vb.free.fr/index.php?question4

Tu peux aussi utiliser ta classe comme un module standard en spécifiant dans
ses propriétés:Instancing = GlobalMultiUse
Dans ce cas, ton code deviendra, après référencement de la dll:
Msgobx MonObjet.TTC (...)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
Jean Francois
Merci pour ta reponse

Comme je ne suis pas trop doue le canard est toujours
vivant !

j ai enleve la declaration de la fonction

(Les Dll créées par VB sont des composants COM qui ne sont
pas utilisables via la syntaxe Declare Function...)


Dans les references monprojet etait deja ajoute (MaDll.Dll)

J ai marque sur le bouton du form

Calcul est le nom du module qui a ma fonction TTC


Private Sub Command1_Click()

Dim MonObjet As ProjetDLL.calcul
Set MonObjet = New ProjetDLL.calcul

Prix = 100
TVA = 20

Msgobx MonObjet.TTC (Prix,TVA)



Set MonObjet = Nothing


end sub

et maintenant j ai le message


Type defini par l utilisateur non defini pour la ligne

Dim MonObjet As ProjetDLL.calcul


J ai du oublier qqchose mais quoi et ou ??

Merci pour toute aide

Jean Francois



-----Message d'origine-----
Bonjour/soir,
"Jean Francois" a écrit dans le


message de
news:058501c3a6ca$62bddb00$
J ai cree une dll et lorsque je veux l utiliser j ai le
message suivant Type d argument ByRef imcompatible.

Voici le detail

Dans une Dll qui se nomme MaDll.dll j ai un module




calcul
qui contient par exemple la fonction suivante

--------------

Public Function TTC(Prix As Long, TVA As Long) As Long
TTC = Prix + (Prix * TVA) / 100
End Function


-------------

Dans mon .exe

Je declare ma Dll dans un module

-------------
Declare Function TTC Lib "MaDll.dll" (Prix As Long, TVA




As
Long) As Long
---------------




Les Dll créées par VB sont des composants COM qui ne sont


pas utilisables
via la syntaxe Declare Function...

Pour utiliser un tel objet, dans les références, ajoute


ton projet.
Ensuite, par défaut :
Dim MonObjet As ProjetDLL.MaClasse
Set MonObjet = New ProjetDLL.MaClasse
Msgobx MonObjet.TTC (...)
Set MonObjet = Nothing

Autre possibilité, faire du late-binding via CreateObject:
http://faq.vb.free.fr/index.php?question4

Tu peux aussi utiliser ta classe comme un module standard


en spécifiant dans
ses propriétés:Instancing = GlobalMultiUse
Dans ce cas, ton code deviendra, après référencement de


la dll:
Msgobx MonObjet.TTC (...)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


.