Exception au niveau du code

beet2che Messages postés 84 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 14 avril 2009 - 29 août 2008 à 15:08
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 - 31 août 2008 à 03:09
bonjour
une erreur qui se déclence au niveau du code suivant :





Public





Shared
Function identifier(ByVal wmiclass AsString, ByVal wmiproperty AsString)





           Dim result AsNewString("")







           Dim mc As Management.ManagementClass = New ManagementClass(wmiclass)







          Dim moc As Management.ManagementObjectCollection = mc.GetInstances()







          Dim mo As Management.ManagementObject = New ManagementObject







                          For
Each mo In moc







                                       If result = ""Then







                                               Try







                                                result = mo.GetPropertyValue(wmiproperty).ToString







                                                Exit
Try








                                          Catch ex As Exception






                                                 MessageBox.Show(ex.ToString(), "erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)







                                          End
Try








                                   End
If








                       Next mo







Return result







End





Function




l'erreur qui s'affiche est le suivant:
"System.nullReferenceException : la réference d'objet n'est pas définie à une instance d'objet"
l'erreur se déclenche au niveau de la ligne suivante:




 result = mo.GetPropertyValue(wmiproperty).ToString



est ce que quelqu'un peut m'aide et me dire qu'est ce qui cloche?

cordialement

5 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
29 août 2008 à 15:38
Bonjour,

Pour commencer, pas besoin de Exit try dans ton code.

Ensuite, "wmiproperty
" est Nothing ou "" ?

http://nhen0039.chez-alice.fr/index.php
0
beet2che Messages postés 84 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 14 avril 2009
29 août 2008 à 16:21
j'ai besoin de exit try parceque mon but est de récupérer la propriété du premier objet qui vérifie la conditon.en plus l'appel de la fonction identifier se fait comme suit :
retval = identifier("Win32_Processor", "UniqueId")
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
29 août 2008 à 16:28
Bonjour,

Regarde alors la valeur de mo

Ensuite,
Dim mo As Management.ManagementObject = New ManagementObject

Inutile de l'initialiser, le For s'en chargera.

Puis ce n'est mas Exit Try qu'il faut utiliser, mais Exit For.
Le mieux (enfin le mieux est l'ennemi du bien) :
Return mo.GetPropertyValue(wmiproperty).ToString

http://nhen0039.chez-alice.fr/index.php
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
30 août 2008 à 02:44
Salut,
Le type de retour de ta fonction n'est pas non plus déclaré... voici comment c'est "plus mieux"  (mais sans le Try) : 

Public Shared Function identifier(ByVal wmiclass As String, ByVal wmiproperty As String) As String
   Dim mc As Management.ManagementClass = New ManagementClass(wmiclass)
   Dim moc As Management.ManagementObjectCollection = mc.GetInstances()
   For Each mo As Management.ManagementObject In moc
      Dim Result As String = mo.GetPropertyValue(wmiproperty).ToString
      If Result <> "" Then Return Result
   Next mo
End Function

Mais ça ne résout pas le problème...
mo ne peut pas être Nothing , donc le problème vient de la fonction GetPropertyValue. Je pense que la propriété wmiproperty n'existe tout simplement pas dans mo, ce qui soit génère cette erreur dans la fonction elle même, soit retourne Nothing puis l'erreur est généré par l'appel de ToString. Si l'objet mo à une fonction qui permet de tester si le nom d'une propriété existe, tu peux l'utiliser avant d'appeler GetPropertyValue. Sinon, fais le .ToString à la fin comme ceci :

      Dim Result As JeNeSaisPasQuoi = mo.GetPropertyValue(wmiproperty)
      If Result IsNot Nothing Then Return Result

Ca n'ajoute aucune ligne de code.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
31 août 2008 à 03:09
Correction:
<strike> If Result IsNot Nothing Then </strike><strike>Return Result</strike>
If Result IsNot Nothing Then Return Result.ToString
0
Rejoignez-nous