Creer une Sous-Collection dans une DLL ActiveX [Résolu]

Signaler
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
-
Bonjour à tous

Grace au simple mais non moins excelent exemple de Max12 EXEMPLE DE DLL ET EXE
J'ai à peu pres compris comment faire.

Mais j'ai néanmoins une question.

Dans son exemple Max12 créé un module de classe "ClsStart.cls" dans lequel il ecrit
Public Function Coucou()
MsgBox "coucou"
End Function

Il compile dans une DLL nommée "DLL_TEST.dll"

Pour appeller cette fonction il ecrit
Set DLLTest = CreateObject("DLL_TEST.ClsStart")

Donc CreateObject(NomDeLaDLL.NomDeLaClasse)
Puis une fois l'objet DLLTest créé, il appelle la fonction comme ceci :
DLLTest.coucou

Ca marche tres bien
Mais si je voulais creer une sous collection, du style :
DLLTest.coucou.bonjour

Comment faut il que je m'y prenne ??

Bonne journée

19 réponses

Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
151
Et si tu ajoutes le Set à cette ligne ?
RetourneClasse = MonAttributClasse2

Set RetourneClasse = MonAttributClasse2

ça produit toujours la même erreur ?

Mon site
Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
151
Bonjour,

Il faut que
DLLTest.coucou
Soit de type objet et que cet objet possède un membre qui s'appelle
bonjour

Mon site
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Bonjour NHENRY,

D'accord mais concrètement, comment je fait pour créer un objet ??
La classe "ClsStart" c'est un objet ???
Il faut que je créé des Classes, les unes après les autres, et que je les appellent en les imbriquant, c'est ça ???

Si tu connaissais un petit lien ou y'a un exemple tout simple, car c'est ce que je comprend le mieux
C'est vrai que ça m'éclairerait bien plus que les mots.
Au moins avec l'exemple de Max12 tout simple, j'ai compris en 5 minutes, et tu peut me croire, c'est un exploit pour moi
Il me faudrait le même exemple, mais avec une arborescence de collections mais qui fait pas "Whatmilles" lignes, car parfois je trouve des codes tellement complet que je comprend pas mieux
Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
151
Bonjour,

Classe 1 :

Public Function RetourneClasse as Classe2
RetourneClasse=MonAttributClasse2
End Function


Classe 2 :

Public Sub AfficheMessageBox()
MsgBox "ça marche"
End Sub


Ensuite :
MonObjetClasse1.RetourneClasse.AfficheMessageBox

Mon site
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Merci NHENRY

Bon bah l'exemple que tu m'as donné doit être trop simple
J'ai pas compris ce qu'était "MonAttributClasse2 "

J'ai commis ça....mais ça marche pas

Private Sub Command1_Click()
    Dim MonObjetClasse1 As Object
    Set MonObjetClasse1 = CreateObject("DLL_TEST.Classe1")
    MonObjetClasse1.RetourneClasse.AfficheMessageBox
    Set MonObjetClasse1 = Nothing
End Sub


Classe1.cls
Public Function RetourneClasse() As Classe2
 RetourneClasse = AfficheMessageBox
End Function


Classe2.cls
Public Sub AfficheMessageBox()
 MsgBox "ça marche"
End Sub
Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
151
Bonjour,

Tu n'a pas compris :
Public Function RetourneClasse as Classe2
RetourneClasse=MonAttributClasse2
End Function

n'est pas :

Public Function RetourneClasse() As Classe2
RetourneClasse = AfficheMessageBox
End Function

MonAttributClasse2 est une variable objet instanciée de type Classe2

Mon site
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
MonAttributClasse2 est une variable objet instanciée de type Classe2

Pas mieux....ça veut dire quoi ça en bon français
Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
151
Bonjour,

Dans Classe 1 :

Private MonAttributClasse2 As Classe2 =new Classe2

ou un dérivé.

Mon site
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Bon, j'ai pas de chance ce soir.
Alors maintenant j'ai un message "Variable non definie" a l'appel de
 MonObjetClasse1.RetourneClasse.AfficheMessageBox


Voici tous le code:

Private Sub Command1_Click()

    Dim MonObjetClasse1 As Object
    Set MonObjetClasse1 = CreateObject("DLL_TEST.Classe1")
    MonObjetClasse1.RetourneClasse.AfficheMessageBox
    Set MonObjetClasse1 = Nothing
    
End Sub


Classe1.cls
Private MonAttributClasse2 As Classe2

Public Function RetourneClasse() As Classe2
 RetourneClasse = MonAttributClasse2
End Function


Classe2.cls
Public Sub AfficheMessageBox()
 MsgBox "ça marche"
End Sub
Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
151
Bonjour,

Sur quelle ligne ?
Sinon, où est instancié MonAttributClasse2 ?

Mon site
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Sur quelle ligne ?
J'ai un message "Variable non definie" a l'appel de "MonObjetClasse1.RetourneClasse.AfficheMessageBox"

Sinon, où est instancié MonAttributClasse2 ?
Je sais pas...en fait j'sais pas ce que ça veut dire instancier

Moi, j'ai écrit tout ce que je viens de te mettre au dessus
Tu m'as dit de rajouter "Private MonAttributClasse2 As Classe2" dans classe1 alors c'est ce que j'ai fait.
J'ai Mis en référence dans l'exe la DLL "Test_DLL.dll" et c'est tout ce que j'ai fait.
Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
151
Bonjour,

Tu as oublié le "New" de la classe2 ...

Mon site
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Oui, parce que ça me donnait une erreur quand je tapait la ligne que tu m'avais donné, alors j'ai enlevé le NEW
Private MonAttributClasse2 As Classe2 =new Classe2


Donc maintenant j'ai tout comme avant mais j'ai changé la ligne
Private MonAttributClasse2 As Classe2

par
Private MonAttributClasse2 As New Classe2


Et ça marche pas mieux
Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
151
Bonjour,

As-tu vérifier la valeur des différentes expressions ?
MonObjetClasse1
MonObjetClasse1.RetourneClasse
Pour voir si tout va bien.
Ensuite, essayes dans la fenêtre de débogage (Ctrl+G).


Mon site
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Bah quand je fais dans CTRL+G :

? MonObjetClasse1
? MonObjetClasse1.RetourneClasse

Il me repond que l'objet ne gere pas cette propriete ou cette methode
C'est pas bon signe a mon avis
Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
151
Bonjour,

Tu peux remettre tout ton code, stp, histoire de bien se comprendre ?

Mon site
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
T'es trop fort NHenry..cette fois ça marche

J'ai mis un msgbox dans chaque classe, et je vois les deux.

Je te remercie mille fois de ta patience et de ta competence

Bonne journée
Messages postés
14771
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
151
Bonjour,

Merci, de rien, on est aussi là pour ça :)

Mon site