Pb Byref avec Dll ( plus propre )

Le
Jean Francois
Bonjour

Malgre mes recherches dans les anciennes question du meme
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
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


Dans mon Form sur click j ai

--

Public cl1 As Calcul

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

End Sub
--

Si j execute j ai le message Type d argument ByRef
imcompatible

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
le resoudre

Merci d’avance pour votre aide

Jean franois
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
François Picalausa
Le #12866321
Bonjour/soir,
"Jean Francois" 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
Jean Francois
Le #12866281
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"

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


.



Publicité
Poster une réponse
Anonyme