Bonjour tout le monde
Je souhaite créer un tableau dynamique d'objet qui eux même possèdent un attribut tableau dynamique d'un autre type d'objet...
Par exemple, j'ai créé la classe qui recense les caractéristiques des cartes réseaux physiques (et actives). Un de ses attributs contient la liste des adresses IP avec les masques qui peuvent lui être affectés, j'ai donc définit cet attribut comme un tableau dynamique d'objet de type adresse IP, pour mieux hiérarchiser ces données, qui elle même ne contient que deux attributs : IP et masque.
Oui, je sais, cela parait bien compliqué, je joins donc le source épuré pour exposer le problème rencontré :
J'arrive bien à affecter des valeurs à des attributs basiques (que j'ai supprimé ici par ne pas rendre trop indigeste mon source), mais lorsque je tente de passer mes valeurs à une méthode pour renseigner ma sous classe, ça coince (à la fin du source)
Vous remerciant de toute l'aide que vous pourriez m'apporter,
Bien cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 option explicit dim objWMIService : set objWMIService = GetObject("winmgmts:\\.\root\cimv2") dim objShell : set objShell = WScript.CreateObject("WScript.shell") dim tabCarte() dim nics, ip, subnet dim i, j, m ' Petites variables temporaires servant d'indice ' Récupération des cartes réseau physiques qui sont Ethernet (protocole 802.3) set nics = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter=TRUE AND ConfigManagerErrorCode=0") ' On va alimenter la collection d'éléments de carte réseau avec les éléments trouvés for each m in nics ' Liste toutes les interfaces physiques. Attention, les cartes réseau WIFI y sont également inclus ' Si on est dans la boucle, c'est qu'une carte a été relevée if(tableauVide(tabCarte)) then i = Ubound(tabCarte) + 1 else i = 0 ' Récupère la taille courant du tableau redim preserve tabCarte(i) ' Augmentation de la taille du tableau de 1 set tabCarte(i) = new C_CarteReseau ' On instancie un nouvel objet C_CarteReseau et on l'affecte dans le tableau tabCarte(i).setMac = m.MACAddress ' On sauvegarde l'adresse MAC de la carte réseau on error resume next ' Cas où la clef IPAddress ou SubnetMask n'existerait pas ip = objShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & m.GUID & "\IPAddress") ' Liste des adresses IP subnet = objShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & m.GUID & "\SubnetMask") ' Liste des masques for j = 0 to ubound(ip) step 1 ' Alors on parcours les deux tableaux et on sauvegarde les adresses IP et leur masque réseau tabCarte(i).addIP ip(j), subnet(j) next next function tableauVide(testTab) ' Fonction qui permet de vérifier qu'un tableau n'est pas vide dim a on error resume next a = ubound(testTab) tableauVide = CBool(a = 0) end function class C_AdresseIP ' Classe Adresse IP ' Attributs private attIp ' adresse IP private AttMasque ' masque de sous réseau ' Méthodes sub Class_Initialize() ' Initialisation end sub sub Class_Terminate() ' Terminaison (affectation de Nothing à l'objet) end sub public property let SetIP(adresseIP) attIp = adresseIP end property public property let SetMasque(masque) attMasque = masque end property public property get GetIP() GetIP = attIp end property public property get GetMasque() GetMasque = attMasque end property end class class C_CarteReseau ' Classe Carte réseau ' Attributs private attIp() ' Tableau des adresses IP/Masque (tableau d'objet C_AdresseIP) ' Méthodes sub Class_Initialize() ' Initialisation end sub sub Class_Terminate() ' Terminaison (affectation de Nothing à l'objet) end sub public sub addIp(adresseIp, masque) ' Récupération de la liste des adresses IP dim i1 if(tableauVide(attIp)) then i1 = ubound(attIp) else i1 = 0 redim preserve attIp(i1) set attIp(i1) = new C_AdresseIP attIp(i1).SetIP(adresseIp) ' <==== Cela coince ici attIp(i1).SetMasque(masque) ' <==== Cela coince ici end sub end class
Partager