VB6->VB2008 erreur sur array. [Résolu]

Signaler
Messages postés
16
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
31 mars 2010
-
Messages postés
16
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
31 mars 2010
-
Bonjour ,

Suite a l'upgrade d'un code depuis VB6 vers VB 2008 j'obtiens une erreur sur un tableau :

        Dim arrComputers As Object
        arrComputers = Array("localhost")


Ce bout de code fonctionnait parfaitement sous VB6 mais depuis son import dans VB2008 j'ai l'erreur suivante :
Erreur 1 'Array' est un type et ne peut pas être utilisé en tant qu'expression. X:\listeprog.vb 90 24 RIS_OSN


N'ayant pas coder cette partie je me retrouve dans l'incapacité de rectifié l'erreur suivante, d'autant plus que cette ligne me parait bonne (mais ce n'est pourtant pas le cas)

Merci d'avance de vous pencher sur mon problème.

6 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Voila un exemple :

Il faut que tu inseres la reference System.Management dans tes références de projet


La methode est mise en shared pour etre static pour etre appelee de cette maniere
 WMI.Recherche()


Imports System.Management
Imports System

Public Class WMI
    Public Shared Sub Recherche()
        Dim strComputer As String
        Dim arrComputers As List(Of String) = New List(Of String)
        arrComputers.Add("localhost")

        For Each strComputer In arrComputers

            Dim query As ObjectQuery
            Dim scope As ManagementScope = New ManagementScope(String.Format("\\{0}\root\cimv2", strComputer))
            scope.Connect()
            query = New ObjectQuery("SELECT * FROM Win32_ComputerSystemProduct")
            Dim queryCollection As ManagementObjectCollection
            Dim searcher As ManagementObjectSearcher

            searcher = New ManagementObjectSearcher(scope, query)

            queryCollection = searcher.Get()

            Dim m As ManagementObject
            For Each m In queryCollection
                frm_main.lbl_vendor.Text = m("Vendor")
                frm_main.lbl_version.Text = m("Version")
                frm_main.lbl_model.Text = m("Name")
            Next
        Next strComputer

    End Sub
End Class


J'ai pas ComputerName car il est pas dans cette requete WMI.

Bon dev
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Salut,

Peux-tu complété avec l'utilisation qui est faite de ta variable.

  Dim arrComputers As Arraylist = new Arraylist
  arrComputers.add("localhost")


ou mieux avec les génériques (plus performant)

  Dim arrComputers As List(of String) = new List(of String)
  arrComputers.Add("localhost")
Messages postés
16
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
31 mars 2010

Merci de vous être penché sur mon problème.

Alors l'utilisation est pour récupérer des infos sur la machine sur lequel est utilisé l'application.

Voici la fonction en entiere :

Public Function Recherche() As Object
        Dim InfoNetwork As Object
        Dim objItem As Object
        Dim colItems As Object
        Dim objWMIService As Object
        Dim strComputer As Object
        Dim arrComputers As Object

        On Error Resume Next

        Const wbemFlagReturnImmediately As Integer = &H10
        Const wbemFlagForwardOnly As Integer = &H20

        arrComputers = array("localhost")
        For Each strComputer In arrComputers
            objWMIService = GetObject("winmgmts:\" & strComputer & "\root\CIMV2")
            colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystemProduct", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)

            For Each objItem In colItems
                frm_main.txt_ID.Text = "Computer: " & InfoNetwork.ComputerName
                MsgBox(InfoNetwork.ComputerName)
                frm_main.lbl_vendor.Text = objItem.Vendor
                frm_main.lbl_version.Text = objItem.Version
                frm_main.lbl_model.Text = objItem.Name
            Next objItem
        Next strComputer

    End Function


J'ai essayé les 2 solutions elles enlèvent bien le message d'erreur mais la fonction ne fonctionne plus (elle fonctionnait bien en VB6)...
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Utilises les classes de DOTNET WMI

exemple ici

Evites d'utiliser des varaibles de types objet

et ta fonction retourne rien.

(c'est plus une sub)

Enleves la gestion d'erreur à la VB6 (onerror ....)
Messages postés
16
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
31 mars 2010

Merci pour vos réponses mais je ne serais pas capable de réécrire cette partie la.
J'ai d'ailleurs essayé mais je n'arrive même pas a faire un code correct ...
Je ne vous demanderais pas de refaire le code en VB2008 sauf si quelqu'un a déjà quelque chose de tout prêt pour retourner les valeurs "constructeur, version ...)

Je retourne donc malgré moi a VB6, au moins j'arrive encore a faire quelque chose avec ^^.

Merci quand même de votre aide !
Messages postés
16
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
31 mars 2010

Merci beaucoup !

Cela fonctionne parfaitement .
Pour le computername je vais le chercher dans la base de registre c'était vraiment pour récupérer les infos constructeurs que cela bloquait !

Merci encore pour ton aide