在VB.Net中传递整个数组

时间:2011-05-31 17:01:59

标签: vb.net

我是编程的初学者。我写了一个脚本来使用VB设置DNS设置。我能够设置主要地址。

但是,我不知道如何设置辅助地址,因为它需要使用数组。

如何做到这一点?

Dim DNS As String() = {"192.168.1.1", "192.168.1.2"}

Dim objMC As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
Dim objMOC As ManagementObjectCollection = objMC.GetInstances()

For Each objMO As ManagementObject In objMOC
    If (Not CBool(objMO("IPEnabled"))) Then
        Continue For
    End If

    Try
        Dim objSetIP As ManagementBaseObject = Nothing
        Dim objNewDNS As ManagementBaseObject = Nothing
        objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder")

        'Set DNS to DHCP
        objNewDNS("DNSServerSearchOrder") = New String() {DNS()}
        objSetIP = objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS, Nothing)
        Console.WriteLine("Updated IPAddress, SubnetMask and Default Gateway!")
    Catch ex As Exception
        MessageBox.Show("Unable to Set IP : " & ex.Message)
    End Try
Next objMO

1 个答案:

答案 0 :(得分:6)

在VB.Net中,Dim关键字实际上是Dimension的缩写,可用于声明数组。

只需将括号应用于变量或类型,并且您可以预先设置数组。

Dim arrayOfString As String()

或者

Dim arrayOfString() As String

当然,它比那复杂一点。您可能希望使用预定义数量的元素声明数组,例如5,假设为Option Base 0

Dim arrayOfInt(4) As Int

或者您可能希望为数组分配一些预定义的值。

Dim arrayofInt As Int() = {1, 2, 3, 4, 5}

您也可以使用此语法

Dim arrayOfStrings = New String() {"1.2.3.4", "5.6.7.8"}
例如

。你的例子,

Dim DNS As String() = {"192.168.1.1", "192.168.1.2"} 

似乎完全有效。

在您的示例中,您有错误使用WMI。我看到你想在"SetDNSServerSearchOrder"类上调用"Win32_NetworkAdapterConfiguration"方法。

objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder")将objNewDNS设置为ManagementBaseObject,它是"SetDNSServerSearchOrder"方法的参数集合。

"SetDNSServerSearchOrder"采用一个名为"DNSServerSearchOrder"的参数,如here所述,恰好是一个字符串数组。

因此,除非我弄错了,假设字符串数组DNS是您的搜索顺序,您的代码应为:

'Set DNS to DHCP         
objNewDNS("DNSServerSearchOrder") = DNS 
objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS)

请注意,此代码会丢弃方法调用的返回值。

编辑:

根据您的评论,objMO.InvokeMehtod调用返回的对象实际上是ManagementBaseObject。这包装了被调用方法的“returnValue”。因此,如果有必要,下面的代码将帮助您获得返回值。

'Set DNS to DHCP         
objNewDNS("DNSServerSearchOrder") = DNS 
Dim oResult As ManagementBaseObject = _
    objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS)
Dim result As Integer = CType(oResult["returnValue"], Integer)

所以你的问题与你声明数组的能力无关,而是与WMI的繁琐接口有关。我猜你可能需要多一些调用来使你的控制台输出完全有效,但我希望这可以帮助你。