Einzelnen Beitrag anzeigen

Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

WMI Abfragen + Fehler wenn Rückgabewert NULL ist

  Alt 16. Dez 2008, 10:00
Hi,

ich frage via WMI Computer Informationen über das Netzwerk ab. Funktioniert auch alles wunderbar. Nur beim Auslesen der netzwerkeinstellungen habe ich Probleme.

Ich lese folgendes aus:
- Adaptername
- IP
- Subnetmask
- Gateway
- DNS
- WINS
- MAC

Beim Auslesen des Gateways und der DNS Einstellungen habe ich Probleme. Beide geben ein Array zurück. Es kann vorkommen, dass es keine Rückgabewert gibt und stoße ich auf einen Fehler.

Mein Code:
Delphi-Quellcode:
...
try
  SWbemLocator1 := CoSWbemLocator.Create;
  // Für lokale Computer darf kein Benutzer und Passwort verwendet werden
  if UpperCase(edt_system.Text) <> UpperCase(GetEnvironmentVariable('COMPUTERNAME')) then
     aSrv := SWbemLocator1.ConnectServer(edt_system.Text,'root\cimv2',frm_main.edt_user.Text, frm_main.edt_password.Text,'','',0,vNVS)
   else
     aSrv := SWbemLocator1.ConnectServer(edt_system.Text,'root\cimv2','','','','',0,vNVS);

  //*** Network Information ***
  Counter := 0;
  aObjSet := aSrv.ExecQuery('Select * from Win32_NetworkAdapterConfiguration where IPEnabled = true','WQL', 0, aNVSDummy);
  pEnum := aObjSet.Get__NewEnum as IEnumVARIANT;
  while (TRUE) do
  begin
     hRes := pEnum.Next(1, vOut, dwRetrieved);
     if hRes <> S_OK then
       Break;

     TempArray := vOut.IPAddress;
     if (TempArray[0] <> '0.0.0.0') and (TempArray[0] <> '') then
     begin
       DNS := '';

       ANetwork[Counter].gw := VarToStr(vOut.DefaultIPGateway[0]); // ---> hier kommt der Fehler wenn kein Wert vorhanden ist

       TempArray := vOut.DNSServerSearchOrder; // ---> hier kommt der Fehler wenn kein Wert vorhanden ist
       for i := 0 to Length(TempArray) - 1 do
       begin
         if i = 0 then
           DNS := vOut.DNSServerSearchOrder[i]
         else
           DNS := DNS + ', ' + vOut.DNSServerSearchOrder[i];
       end;
       ANetwork[Counter].dns := DNS;

       Inc(Counter);
     end;
   end;
...
Ich habe es mit folgender Abfrage versucht aber es hat auch nicht funktioniert. Beispielhaft für das Gateway.
Delphi-Quellcode:
 if vOut.DefaultIPGateway <> NULL then
   ANetwork[Counter].gw := VarToStr(vOut.DefaultIPGateway[0])
 else
   ANetwork[Counter].gw := '';
Wenn DefaultIPGateway jetzt keinen Wert hat, funktioniert es. Sollte aber ein Wert kommen, läuft die IF Abfrage auf einen Fehler.

Wie kann ich prüfen, ob ein Wert kommt oder nicht in Abhängigkeit des Rückgabewertes?

Ich bin für jede Hilfestellung dankbar. Denn ich verzweifel langsam.

Gruß, Sven
Miniaturansicht angehängter Grafiken
fehler_222.jpg  
  Mit Zitat antworten Zitat