Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WMI Abfragen + Fehler wenn Rückgabewert NULL ist (https://www.delphipraxis.net/125994-wmi-abfragen-fehler-wenn-rueckgabewert-null-ist.html)

Piro 16. Dez 2008 09:00


WMI Abfragen + Fehler wenn Rückgabewert NULL ist
 
Liste der Anhänge anzeigen (Anzahl: 1)
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

Piro 17. Dez 2008 09:14

Re: WMI Abfragen + Fehler wenn Rückgabewert NULL ist
 
Hat denn keiner eine Idee.

Gruß, Sven

Piro 17. Dez 2008 10:05

Re: WMI Abfragen + Fehler wenn Rückgabewert NULL ist
 
Ich schließe diesen Beitrag, da das Problem kein WMI-Fehler ist sondern ein anderes. Ich erstelle einen neuen Beitrag.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz