OVH Cloud OVH Cloud

VB6 : création de dll

7 réponses
Avatar
peterpan
Post=E9 le: Lun Juil 07, 2003 11:31 Sujet du message:=20
[VB6] cr=E9ation d'une dll =20

-----------------------------------------------------------
---------------------
=20
Hello!=20

Je cherche =E0 cr=E9er une dll en vb.6, mais quand j'appelle=20
les fonctions de cette dll depuis une autre apply, j'ai le=20
message " point d'entr=E9e fonction_machin d'une dll=20
introuvable dans dll_bidule.dll ".=20

Cher lecteur, peux-tu me dire comment programmer=20
proprement cette dll?=20

merci=20

Peter.=20

7 réponses

Avatar
François Picalausa
Bonjour/soir,

Peut-être essayes-tu de faire
Private Declare Function fonction_machin Lib "dll_bidule" ... ?
Dans ce cas, ce n'est pas la bonne méthode.
Il faut aller dans les références du projet et cocher la référence à ta dll.

Ensuite, tu pourra faire comme ceci:

Dim objMaClasse As MaDll.MaClasse
Set objMaClasse = New MaDll.MaClasse
Debug.Print objMaClasse.fonction_machin
Set objMaClasse = Nothing

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

peterpan wrote:
Posté le: Lun Juil 07, 2003 11:31 Sujet du message:
[VB6] création d'une dll

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

Hello!

Je cherche à créer une dll en vb.6, mais quand j'appelle
les fonctions de cette dll depuis une autre apply, j'ai le
message " point d'entrée fonction_machin d'une dll
introuvable dans dll_bidule.dll ".

Cher lecteur, peux-tu me dire comment programmer
proprement cette dll?

merci

Peter.


Avatar
Peterpan
Salut François

merci pour ta réponse,...
... même si cela ne m'a pas suffit :o(

j'ai une erreur de compilation " Méthode ou membre de
données introuvable. " avec en focus "fonctionTest" dans
la ligne : "Debug.Print objMaClasse.fonctionTest"

Et voici tout ce qu'il y a dans ma dll :
Private Sub fonctionTest
msgBox ("Hello") ' (et oui, il faut bien commencé par ça)
end Sub

Par ailleurs, je ne vois pas pourquoi le "Private Declare
Function..." ne marche pas, je pensais que c'était son
rôle?

Merci de répondre au pauvre débutant que je suis :)

Peter.


-----Message d'origine-----
Bonjour/soir,

Peut-être essayes-tu de faire
Private Declare Function fonction_machin


Lib "dll_bidule" ... ?
Dans ce cas, ce n'est pas la bonne méthode.
Il faut aller dans les références du projet et cocher la


référence à ta dll.

Ensuite, tu pourra faire comme ceci:

Dim objMaClasse As MaDll.MaClasse
Set objMaClasse = New MaDll.MaClasse
Debug.Print objMaClasse.fonction_machin
Set objMaClasse = Nothing

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

peterpan wrote:
Posté le: Lun Juil 07, 2003 11:31 Sujet du message:
[VB6] création d'une dll

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




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

Hello!

Je cherche à créer une dll en vb.6, mais quand j'appelle
les fonctions de cette dll depuis une autre apply, j'ai




le
message " point d'entrée fonction_machin d'une dll
introuvable dans dll_bidule.dll ".

Cher lecteur, peux-tu me dire comment programmer
proprement cette dll?

merci

Peter.




.



Avatar
François Picalausa
Bonjour/soir,

Private Sub fonctionTest
msgBox ("Hello") ' (et oui, il faut bien commencé par ça)
end Sub



Private? C'est un membre privé absolument pas accessible de l'extérieur que
tu veux? Ah beh non hein!
Soit Public soit rien.. et Pirvate uniquement quand ta fonction est utilisée
uniquement à l'intérieur de ta classe.

Par ailleurs, je ne vois pas pourquoi le "Private Declare
Function..." ne marche pas, je pensais que c'était son
rôle?



Une histoire de convention d'appel... on n'appelle pas un composant COM
(C'est le type d'objets que VB crée) comme on apelle une API....

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


Peterpan wrote:
Salut François

merci pour ta réponse,...
... même si cela ne m'a pas suffit :o(

j'ai une erreur de compilation " Méthode ou membre de
données introuvable. " avec en focus "fonctionTest" dans
la ligne : "Debug.Print objMaClasse.fonctionTest"

Et voici tout ce qu'il y a dans ma dll :
Private Sub fonctionTest
msgBox ("Hello") ' (et oui, il faut bien commencé par ça)
end Sub

Par ailleurs, je ne vois pas pourquoi le "Private Declare
Function..." ne marche pas, je pensais que c'était son
rôle?

Merci de répondre au pauvre débutant que je suis :)

Peter.


-----Message d'origine-----
Bonjour/soir,

Peut-être essayes-tu de faire
Private Declare Function fonction_machin


Lib "dll_bidule" ... ?
Dans ce cas, ce n'est pas la bonne méthode.
Il faut aller dans les références du projet et cocher la référence à
ta dll.

Ensuite, tu pourra faire comme ceci:

Dim objMaClasse As MaDll.MaClasse
Set objMaClasse = New MaDll.MaClasse
Debug.Print objMaClasse.fonction_machin
Set objMaClasse = Nothing

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

peterpan wrote:
Posté le: Lun Juil 07, 2003 11:31 Sujet du message:
[VB6] création d'une dll

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

Hello!

Je cherche à créer une dll en vb.6, mais quand j'appelle
les fonctions de cette dll depuis une autre apply, j'ai le
message " point d'entrée fonction_machin d'une dll
introuvable dans dll_bidule.dll ".

Cher lecteur, peux-tu me dire comment programmer
proprement cette dll?

merci

Peter.




.




Avatar
PeterPan
Youpi!!!
ça marche. Evidemment je ne suis pas très fier de mon
private...

par ailleur, c'est quelques lignes dans l'apply d'appel
ont suffi :

Private Sub Command1_Click()
Dim MaClasse as new Class1
MaClasse.test
and Sub.

En tout cas Merci.


Peter.

Une dernière chose : Est-il possible d'appeler cette
fonction depuis un programme VB.Net (pour l'instant il
refuse de me le référencer)?


-----Message d'origine-----
Bonjour/soir,

Private Sub fonctionTest
msgBox ("Hello") ' (et oui, il faut bien commencé par




ça)
end Sub



Private? C'est un membre privé absolument pas accessible


de l'extérieur que
tu veux? Ah beh non hein!
Soit Public soit rien.. et Pirvate uniquement quand ta


fonction est utilisée
uniquement à l'intérieur de ta classe.

Par ailleurs, je ne vois pas pourquoi le "Private




Declare
Function..." ne marche pas, je pensais que c'était son
rôle?



Une histoire de convention d'appel... on n'appelle pas un


composant COM
(C'est le type d'objets que VB crée) comme on apelle une


API....

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


Peterpan wrote:
Salut François

merci pour ta réponse,...
... même si cela ne m'a pas suffit :o(

j'ai une erreur de compilation " Méthode ou membre de
données introuvable. " avec en focus "fonctionTest" dans
la ligne : "Debug.Print objMaClasse.fonctionTest"

Et voici tout ce qu'il y a dans ma dll :
Private Sub fonctionTest
msgBox ("Hello") ' (et oui, il faut bien commencé par




ça)
end Sub

Par ailleurs, je ne vois pas pourquoi le "Private




Declare
Function..." ne marche pas, je pensais que c'était son
rôle?

Merci de répondre au pauvre débutant que je suis :)

Peter.


-----Message d'origine-----
Bonjour/soir,

Peut-être essayes-tu de faire
Private Declare Function fonction_machin


Lib "dll_bidule" ... ?
Dans ce cas, ce n'est pas la bonne méthode.
Il faut aller dans les références du projet et cocher






la référence à
ta dll.

Ensuite, tu pourra faire comme ceci:

Dim objMaClasse As MaDll.MaClasse
Set objMaClasse = New MaDll.MaClasse
Debug.Print objMaClasse.fonction_machin
Set objMaClasse = Nothing

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

peterpan wrote:
Posté le: Lun Juil 07, 2003 11:31 Sujet du message:
[VB6] création d'une dll

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








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

Hello!

Je cherche à créer une dll en vb.6, mais quand








j'appelle
les fonctions de cette dll depuis une autre apply,








j'ai le
message " point d'entrée fonction_machin d'une dll
introuvable dans dll_bidule.dll ".

Cher lecteur, peux-tu me dire comment programmer
proprement cette dll?

merci

Peter.




.






.



Avatar
François Picalausa
Bonjour/soir,

Dim MaClasse as new Class1


<quote source=Zoury>
Les As mangent les New!

Il existe plusieurs façon de créer un objet en VB. La plus commune est
celle-ci:

Dim oCol As Collection
Set oCol = New Collection

La technique suivante existe aussi :

Dim oCol As New Collection

Cette deux techniques sont très différentes et je conseilles fortement
l'utilisation de la première!

- Dans le premier cas, VB déclare un pointeur vide pour notre objet (Dim
oCol As Collection) et réserve la mémoire utile à notre objet par la suite
et fait pointer notre pointeur sur l'objet (Set oCol = New Collection). Tu
est le seul à décidé quand l'objet sera initialisé et détruit.

- Dans le deuxième cas, VB déclare un pointeur vide pour ton objet, et
attend à la première utilisation de l'objet pour réservé lui-même l'espace
dont l'objet à besoin et faire pointer notre pointeur dessus. Ça semble
bien, mais ça peut jouer des tours. Tu ne pourras jamais vérifier si l'objet
est intialisé, car il l'est virtuellement tout le temps...

Ex:

Private Sub Form_Load()

Dim oCol As Collection
Dim oCol2 As New Collection

'Objet non initialisé
Debug.Print "oCol Is Nothing: " & (oCol Is Nothing)

'Objet initialisé
Set oCol = New Collection
Debug.Print "oCol Is Nothing: " & (oCol Is Nothing)


'Objet non initialisé, mais VB l'initialise tout seul...
Debug.Print "oCol2 Is Nothing" & (oCol2 Is Nothing)

Set oCol = Nothing
Set oCol2 = Nothing

End Sub

Donc non seulement la deuxième méthode est plus claire et prévient les bugs,
elle nécessite également beaucoup moins de travaille "behind the scene" pour
effectuer le traitement. Je te jures que les 2 secondes de plus que tu
prends pour écrire la deuxième lignes en valent vraiment la peine..
</quote>

Sinon, toujours décharger explicitement les objets de la mémoire pour
s'assurer que VB le fasse bien, qu'il n'y ait pas de perte de mémoire:
Set MaClasse = Nothing

Une dernière chose : Est-il possible d'appeler cette
fonction depuis un programme VB.Net (pour l'instant il
refuse de me le référencer)?



<Mauvais groupe - réponse standard>
Ce groupe est dédié à VB6 et à ses versions antérieurs. Pour obtenir de
l'aide sur VB.NET ou tous autre produit .NET, pose tes questions dans
les groupes contenant le terme "dotnet" ou "vsnet", tel que :

microsoft.public.fr.dotnet.vb
</Mauvais groupe - réponse standard>

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


PeterPan wrote:
Youpi!!!
ça marche. Evidemment je ne suis pas très fier de mon
private...

par ailleur, c'est quelques lignes dans l'apply d'appel
ont suffi :

Private Sub Command1_Click()
Dim MaClasse as new Class1
MaClasse.test
and Sub.

En tout cas Merci.


Peter.

Une dernière chose : Est-il possible d'appeler cette
fonction depuis un programme VB.Net (pour l'instant il
refuse de me le référencer)?


-----Message d'origine-----
Bonjour/soir,

Private Sub fonctionTest
msgBox ("Hello") ' (et oui, il faut bien commencé par ça)
end Sub



Private? C'est un membre privé absolument pas accessible de
l'extérieur que tu veux? Ah beh non hein!
Soit Public soit rien.. et Pirvate uniquement quand ta fonction est
utilisée uniquement à l'intérieur de ta classe.

Par ailleurs, je ne vois pas pourquoi le "Private Declare
Function..." ne marche pas, je pensais que c'était son
rôle?



Une histoire de convention d'appel... on n'appelle pas un composant
COM (C'est le type d'objets que VB crée) comme on apelle une API....

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


Peterpan wrote:
Salut François

merci pour ta réponse,...
... même si cela ne m'a pas suffit :o(

j'ai une erreur de compilation " Méthode ou membre de
données introuvable. " avec en focus "fonctionTest" dans
la ligne : "Debug.Print objMaClasse.fonctionTest"

Et voici tout ce qu'il y a dans ma dll :
Private Sub fonctionTest
msgBox ("Hello") ' (et oui, il faut bien commencé par ça)
end Sub

Par ailleurs, je ne vois pas pourquoi le "Private Declare
Function..." ne marche pas, je pensais que c'était son
rôle?

Merci de répondre au pauvre débutant que je suis :)

Peter.


-----Message d'origine-----
Bonjour/soir,

Peut-être essayes-tu de faire
Private Declare Function fonction_machin


Lib "dll_bidule" ... ?
Dans ce cas, ce n'est pas la bonne méthode.
Il faut aller dans les références du projet et cocher la référence
à ta dll.

Ensuite, tu pourra faire comme ceci:

Dim objMaClasse As MaDll.MaClasse
Set objMaClasse = New MaDll.MaClasse
Debug.Print objMaClasse.fonction_machin
Set objMaClasse = Nothing

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

peterpan wrote:
Posté le: Lun Juil 07, 2003 11:31 Sujet du message:
[VB6] création d'une dll

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

Hello!

Je cherche à créer une dll en vb.6, mais quand j'appelle
les fonctions de cette dll depuis une autre apply, j'ai le
message " point d'entrée fonction_machin d'une dll
introuvable dans dll_bidule.dll ".

Cher lecteur, peux-tu me dire comment programmer
proprement cette dll?

merci

Peter.




.






.




Avatar
peterpan
merci pour les explications.

SI j'ai bien compri, dès qu'il y a un 'new' quelque part,
il faudrait mettre un = Nothing à la fin si on veut
programmer proprement...

Par contre, pour le "<Mauvais groupe - réponse standard>",
je l'ai senti venir, mais j'ai voulu tenter... ;o)

-----Message d'origine-----
Bonjour/soir,

Dim MaClasse as new Class1


<quote source=Zoury>
Les As mangent les New!

Il existe plusieurs façon de créer un objet en VB. La


plus commune est
celle-ci:

Dim oCol As Collection
Set oCol = New Collection

La technique suivante existe aussi :

Dim oCol As New Collection

Cette deux techniques sont très différentes et je


conseilles fortement
l'utilisation de la première!

- Dans le premier cas, VB déclare un pointeur vide


pour notre objet (Dim
oCol As Collection) et réserve la mémoire utile à notre


objet par la suite
et fait pointer notre pointeur sur l'objet (Set oCol =


New Collection). Tu
est le seul à décidé quand l'objet sera initialisé et


détruit.

- Dans le deuxième cas, VB déclare un pointeur vide


pour ton objet, et
attend à la première utilisation de l'objet pour réservé


lui-même l'espace
dont l'objet à besoin et faire pointer notre pointeur


dessus. Ça semble
bien, mais ça peut jouer des tours. Tu ne pourras jamais


vérifier si l'objet
est intialisé, car il l'est virtuellement tout le temps...

Ex:

Private Sub Form_Load()

Dim oCol As Collection
Dim oCol2 As New Collection

'Objet non initialisé
Debug.Print "oCol Is Nothing: " & (oCol Is


Nothing)

'Objet initialisé
Set oCol = New Collection
Debug.Print "oCol Is Nothing: " & (oCol Is


Nothing)


'Objet non initialisé, mais VB l'initialise


tout seul...
Debug.Print "oCol2 Is Nothing" & (oCol2 Is


Nothing)

Set oCol = Nothing
Set oCol2 = Nothing

End Sub

Donc non seulement la deuxième méthode est plus claire et


prévient les bugs,
elle nécessite également beaucoup moins de


travaille "behind the scene" pour
effectuer le traitement. Je te jures que les 2 secondes


de plus que tu
prends pour écrire la deuxième lignes en valent vraiment


la peine..
</quote>

Sinon, toujours décharger explicitement les objets de la


mémoire pour
s'assurer que VB le fasse bien, qu'il n'y ait pas de


perte de mémoire:
Set MaClasse = Nothing

Une dernière chose : Est-il possible d'appeler cette
fonction depuis un programme VB.Net (pour l'instant il
refuse de me le référencer)?



<Mauvais groupe - réponse standard>
Ce groupe est dédié à VB6 et à ses versions antérieurs.


Pour obtenir de
l'aide sur VB.NET ou tous autre produit .NET, pose tes


questions dans
les groupes contenant le terme "dotnet" ou "vsnet", tel


que :

microsoft.public.fr.dotnet.vb
</Mauvais groupe - réponse standard>

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


PeterPan wrote:
Youpi!!!
ça marche. Evidemment je ne suis pas très fier de mon
private...

par ailleur, c'est quelques lignes dans l'apply d'appel
ont suffi :

Private Sub Command1_Click()
Dim MaClasse as new Class1
MaClasse.test
and Sub.

En tout cas Merci.


Peter.

Une dernière chose : Est-il possible d'appeler cette
fonction depuis un programme VB.Net (pour l'instant il
refuse de me le référencer)?


-----Message d'origine-----
Bonjour/soir,

Private Sub fonctionTest
msgBox ("Hello") ' (et oui, il faut bien commencé








par ça)
end Sub



Private? C'est un membre privé absolument pas






accessible de
l'extérieur que tu veux? Ah beh non hein!
Soit Public soit rien.. et Pirvate uniquement quand ta






fonction est
utilisée uniquement à l'intérieur de ta classe.

Par ailleurs, je ne vois pas pourquoi le "Private








Declare
Function..." ne marche pas, je pensais que c'était son
rôle?



Une histoire de convention d'appel... on n'appelle pas






un composant
COM (C'est le type d'objets que VB crée) comme on






apelle une API....

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


Peterpan wrote:
Salut François

merci pour ta réponse,...
... même si cela ne m'a pas suffit :o(

j'ai une erreur de compilation " Méthode ou membre de
données introuvable. " avec en focus "fonctionTest"








dans
la ligne : "Debug.Print objMaClasse.fonctionTest"

Et voici tout ce qu'il y a dans ma dll :
Private Sub fonctionTest
msgBox ("Hello") ' (et oui, il faut bien commencé








par ça)
end Sub

Par ailleurs, je ne vois pas pourquoi le "Private








Declare
Function..." ne marche pas, je pensais que c'était son
rôle?

Merci de répondre au pauvre débutant que je suis :)

Peter.


-----Message d'origine-----
Bonjour/soir,

Peut-être essayes-tu de faire
Private Declare Function fonction_machin


Lib "dll_bidule" ... ?
Dans ce cas, ce n'est pas la bonne méthode.
Il faut aller dans les références du projet et










cocher la référence
à ta dll.

Ensuite, tu pourra faire comme ceci:

Dim objMaClasse As MaDll.MaClasse
Set objMaClasse = New MaDll.MaClasse
Debug.Print objMaClasse.fonction_machin
Set objMaClasse = Nothing

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

peterpan wrote:
Posté le: Lun Juil 07, 2003 11:31 Sujet du












message:
[VB6] création d'une dll

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












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

Hello!

Je cherche à créer une dll en vb.6, mais quand












j'appelle
les fonctions de cette dll depuis une autre apply,












j'ai le
message " point d'entrée fonction_machin d'une dll
introuvable dans dll_bidule.dll ".

Cher lecteur, peux-tu me dire comment programmer
proprement cette dll?

merci

Peter.




.






.






.



Avatar
François Picalausa
Bonjour/soir,

SI j'ai bien compri, dès qu'il y a un 'new' quelque part,
il faudrait mettre un = Nothing à la fin si on veut
programmer proprement...



Dès qu'on a un objet et qu'il n'est plus nécessaire de la garder en mémoire,
il vaut mieux employer les méthodes de cet objet pour le fermer, si l'objet
propose de telles méthodes, et ensuite détruire l'instance de cet objet par
= nothing.

Par exemple, pour un objet WordApp représentant une application word:
WordApp.Quit
Set WordApp = Nothing

Et aussi, plus de As New mais Dim ... As monobjet suivit de Set ... = New
monobjet ;-)
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


peterpan wrote:
merci pour les explications.

SI j'ai bien compri, dès qu'il y a un 'new' quelque part,
il faudrait mettre un = Nothing à la fin si on veut
programmer proprement...

-----Message d'origine-----
Bonjour/soir,

Dim MaClasse as new Class1


<quote source=Zoury>
Les As mangent les New!

.....
</quote>

Sinon, toujours décharger explicitement les objets de la mémoire pour
s'assurer que VB le fasse bien, qu'il n'y ait pas de perte de
mémoire: Set MaClasse = Nothing

Une dernière chose : Est-il possible d'appeler cette
fonction depuis un programme VB.Net (pour l'instant il
refuse de me le référencer)?




PeterPan wrote:
par ailleur, c'est quelques lignes dans l'apply d'appel
ont suffi :

Private Sub Command1_Click()
Dim MaClasse as new Class1
MaClasse.test
and Sub.

En tout cas Merci.


Peter.