Tableau dynamique d'objet
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:
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 |