gpt4 book ai didi

vb.net - 在 VB.Net 中传递整个数组

转载 作者:行者123 更新时间:2023-12-01 14:36:14 24 4
gpt4 key购买 nike

我是编程初学者。我使用 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

最佳答案

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

只需将括号应用于变量或类型,嘿,你就拥有了一个数组。

Dim arrayOfString As String()

或者

Dim arrayOfString() As String

当然,它比这更复杂一点。您可能需要使用预定义数量的元素来声明数组,假设Option Base 0,例如 5 个元素。

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。我发现您想要调用 "Win32_NetworkAdapterConfiguration" 类上的 "SetDNSServerSearchOrder" 方法。

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 的繁琐接口(interface)有关。我想您可能需要再进行几次调用才能使控制台输出完全有效,但我希望这可以帮助您。

关于vb.net - 在 VB.Net 中传递整个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6190972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com