problem mit win32_networkadapterconfiguration

  • VB6

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von franky.

    problem mit win32_networkadapterconfiguration

    hallo,

    ich habe mich ein wenig in die wmi classes eingearbeitet, habe aber ein problem mit der classe win32_networkadapterconfiguration. ich moechte mir die ip-adressen mit folgenden script anzeigen lassen:

    Set colClass = objWMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration", , 48)

    Debug.Print "Query: Win32_NetworkAdapterConfiguration::IPAddress"
    On Error Resume Next

    For Each objClass In colClass
    Debug.Print "IPAddress: " & objClass.IPAddress
    Next


    dabei erhalte ich aber folgende fehlermeldung:

    run-time error '13': type mismatch

    habe ich die objClass falsch benannt???

    gruss

    franky
    Ich hab dein Szenario mal nachgestellt und erhielt den
    selben Fehler, 'Type-Mismatch'. Nun musste ich rausfinden
    welchen Typ denn objClass.IPAddress zurückgibt,
    dazu benutzte ich die VarType Funktion von VB.
    Ich erhielt nur 2 Typen : Einmal 1 und 8204.
    Ein Blick in die MSDN verriet mir sofort das der Wert
    1 vbNull entspricht also keinen gültigen Daten
    was schonmal den auftretenden Type-Mismatch
    erklärte. Jetzt blieb nur noch die Frage welchem
    Typ der Wert 8204 entsprach, in der MSDN war der
    höchste Wert nur 8192, der Wert für einen Array.
    Sollte Microsoft vergessen haben einen Datentyp in
    die MSDN geschrieben zu haben ? Nein ! Denn als
    ich weiterlas und zu den Bemerkungen kam, sah ich
    folgendes:


    Auszug aus der MSDN:

    Die VarType-Funktion gibt niemals den Wert für
    vbArray alleine zurück. Der Wert wird immer zu einem
    anderen Wert addiert, um ein Datenfeld eines
    bestimmten Typs anzugeben. Die Konstante
    vbVariant wird nur in Verbindung mit vbArray
    zurückgegeben, um anzuzeigen, daß das Argument
    für die VarType-Funktion ein Datenfeld vom Typ
    Variant ist. Zum Beispiel wird der Wert, der für ein
    Datenfeld aus Ganzzahlen zurückgegeben wird,
    durch vbInteger + vbArray (8194) angegeben.
    Wenn ein Objekt eineStandardeigenschaft hat, gibt
    VarType (Objekt) den Typ dieser
    Standardeigenschaft zurück.


    Die VarType Funktion gab also die Konstante für
    einne Array (8192) und den Datentyp zurück, tja
    8192 + was macht 8204 ? Richtig ! 12 !
    Und welchem Datentyp entspricht 12 ? Variant !
    Das geheimnis war gelüftet : objClass.IPAddress
    gibt einen Variant-Array zurück !
    (Und für mich die Erkenntnis das diese Version des
    WMIs wohl speziell für VB und VBScript erstellt wurde
    keine andere Sprache hat sonst noch den Typen Variant)
    Den daraus resultierenden Code zu schreiben war nicht schwer :

    <pre>
    For Each objClass In colCLass
    If Not IsNull(objCLass.IPAddress) Then
    v() = objCLass.IPAddress

    For i = LBound(v) To UBound(v)
    Debug.Print "IP Address: " & v(i)
    Next i
    End If
    Next
    </pre>

    Vielleicht fragst du dich jetzt ob bei mir ein bis mehrere
    Schrauben locker sind, das wäre durchaus möglich.
    Das zu beweisen war aber nicht mein Ziel (auch wenn
    einige das denken mögen) was ich dir zeigen wollte
    war, dass man alle Probleme lösen kann, bei diesem
    hier hatte ich sogar noch sehr viel Glück das alles so
    schön in der MSDN vermerkt war.
    Kein Mensch kann alle Befehle und Konstanten
    auswendig lernen, das ist aber auch gar nicht nötig,
    es reicht meistens auch mit der MSDN umgehen zu
    können und sich ein bisschen zu bemühen aus ihr
    nützliche Informationen zu gewinnen, dann lassen
    sich fast alle Probleme lösen.