Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

NullReferenzeException

Frage Entwicklung VB for Applications

Mitglied: runner-ralf

runner-ralf (Level 1) - Jetzt verbinden

07.10.2010 um 08:56 Uhr, 2841 Aufrufe, 1 Kommentar

Ich will endlich von VB6 auf VB.Net umsteigen. Aber in meinem Alter(49) geht alles etwas langsamer

Hallo alle zusammen,

ich bin nicht gerade Fit in VB.Net und darum kann ich mit dem Fehler nichts anfangen. Unter VBA läuft das Ding aber unter VB.Net bleibt der Curser bei Next stehen und brungt eben diese Fehlermeldung. Ich weiß nicht was der Compiler von mir will..... Habe im Forum was gelesen das ich bei den Variablen vor Object noch das Wort New schreiben muss. Hat aber auch nichts geholfen.

Könnt ihr mir einen Tipp geben?

Gruß

Ralf

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim objWMI As New Object
Dim objInstances As New Object
Dim objInstance As New Object
Dim strServer As String
strServer = "PCL09077283"

objWMI = GetObject("winmgmts://" & strServer & "/root\cimv2")
objInstances = objWMI.InstancesOf("Win32_OperatingSystem", 48)

On Error Resume Next
For Each objInstance In objInstances
MsgBox(objInstance.BootDevice)
MsgBox(objInstance.BuildNumber)
MsgBox(objInstance.BuildType)
MsgBox(objInstance.Caption)
MsgBox(objInstance.CodeSet)
MsgBox(objInstance.CountryCode)
MsgBox(objInstance.CreationClassName)
MsgBox(objInstance.CSCreationClassName)
MsgBox(objInstance.CSDVersion)
MsgBox(objInstance.CSName)
MsgBox(objInstance.CurrentTimeZone)
MsgBox(objInstance.DataExecutionPrevention_32BitApplications)
MsgBox(objInstance.DataExecutionPrevention_Available)
MsgBox(objInstance.DataExecutionPrevention_Drivers)
MsgBox(objInstance.DataExecutionPrevention_SupportPolicy)
MsgBox(objInstance.Debug)
MsgBox(objInstance.Description)
MsgBox(objInstance.Distributed)
MsgBox(objInstance.EncryptionLevel)
MsgBox(objInstance.ForegroundApplicationBoost)
MsgBox(objInstance.FreePhysicalMemory)
MsgBox(objInstance.FreeSpaceInPagingFiles)
MsgBox(objInstance.FreeVirtualMemory)
MsgBox(objInstance.InstallDate)
MsgBox(objInstance.LargeSystemCache)
MsgBox(objInstance.LastBootUpTime)
MsgBox(objInstance.LocalDateTime)
MsgBox(objInstance.Locale)
MsgBox(objInstance.Manufacturer)
MsgBox(objInstance.MaxNumberOfProcesses)
MsgBox(objInstance.MaxProcessMemorySize)
MsgBox(objInstance.Name)
MsgBox(objInstance.NumberOfLicensedUsers)
MsgBox(objInstance.NumberOfProcesses)
MsgBox(objInstance.NumberOfUsers)
MsgBox(objInstance.Organization)
MsgBox(objInstance.OSLanguage)
MsgBox(objInstance.OSProductSuite)
MsgBox(objInstance.OSType)
MsgBox(objInstance.OtherTypeDescription)
MsgBox(objInstance.PAEEnabled)
MsgBox(objInstance.PlusProductID)
MsgBox(objInstance.PlusVersionNumber)
MsgBox(objInstance.Primary)
MsgBox(objInstance.ProductType)
MsgBox(objInstance.QuantumLength)
MsgBox(objInstance.QuantumType)
MsgBox(objInstance.RegisteredUser)
MsgBox(objInstance.SerialNumber)
MsgBox(objInstance.ServicePackMajorVersion)
MsgBox(objInstance.ServicePackMinorVersion)
MsgBox(objInstance.SizeStoredInPagingFiles)
MsgBox(objInstance.Status)
MsgBox(objInstance.SuiteMask)
MsgBox(objInstance.SystemDevice)
MsgBox(objInstance.SystemDirectory)
MsgBox(objInstance.SystemDrive)
MsgBox(objInstance.TotalSwapSpaceSize)
MsgBox(objInstance.TotalVirtualMemorySize)
MsgBox(objInstance.TotalVisibleMemorySize)
MsgBox(objInstance.Version)
MsgBox(objInstance.WindowsDirectory)
On Error GoTo 0
Next '!!!!!!!!!!!!!!!!!!!!!! DA bleibt das Programm stehen
End Sub
Mitglied: MonoTone
14.10.2010 um 16:40 Uhr
Wenn du von VB6 auf .NET umsteigen willst.
Dann richtig!
Es nützt nix einfach VB6 Code in einer .NET Entwicklungsumgebung zu schreiben.

Mal ein Ansatz für WMI unter .NET:

Zu allererst fügst du dir einen Verweis für System.Management hinzu.

Dann Importierst du System.Management
01.
Imports System.Management 
02.
Module Module1 
03.
    Function Wmi() As String 
04.
        Dim ReturnStr As String = String.Empty 
05.
        Try 
06.
            Dim searcher As New ManagementObjectSearcher( _ 
07.
                "root\CIMV2", _ 
08.
                "SELECT * FROM Win32_OperatingSystem") 
09.
            For Each queryObj As ManagementObject In searcher.Get() 
10.
                For Each prop As PropertyData In queryObj.Properties 
11.
                    If prop.Value IsNot Nothing Then 
12.
                        ReturnStr &= prop.Name & ": " & prop.Value.ToString & vbCrLf 
13.
                    End If 
14.
                Next 
15.
            Next 
16.
        Catch err As ManagementException 
17.
            ReturnStr = ("An error occurred while querying for WMI data: " & err.Message) 
18.
        End Try 
19.
        Return ReturnStr 
20.
    End Function 
21.
    Sub Main() 
22.
        Console.Write(Wmi) 
23.
       Console.Write(vbCrLf & " Drücke eine beliebige Taste zum beenden") 
24.
        Console.Read() 
25.
    End Sub 
26.
End Module 
27.
 
Dies ist eine kleine Konsolenanwendung, die dir die Verwendung von WMI in .NET verdeutlichen soll.
Damit kannst du lokal sämtlich WMI Daten abrufen. Dazu musst du nur den ObjectSearcher anpassen. Momentan fragst du die 'Klasse' Win32_OperatingSystem im NameSpace "roor\CIMV2" ab.

Du kannst dir die Funktion auch leicht umschreiben.
ZB
01.
Private Function wmi(Byval WMIClass as String) 
02.
 Dim searcher As New ManagementObjectSearcher( _ 
03.
                "root\CIMV2", _ 
04.
                "SELECT * FROM " & WMIClass) 
05.
End Function
Die Ausgabe erfolgt dann in der Console die mit Read() pausiert wird.
Das ganze hier ist eine einfache Konsolenanwendung

Zum Umstieg noch ein paar Worte:

On Error etc ist obsolet und du solltest es NIE MEHR in .NET Anwendungen verwenden.
Vermeiden sollte man Variablendeklaration als Object ( vergelichbar mit any in vb6)
Sondern wenn möglich immer mit dem korrekten Datentypen deklarieren.
New ist für die Erstellung von Objekten aus Klassen fast immer notwendig.
Die Verwendung ist oben auch vorhanden:
Dim searcher As New ManagementObjectSearcher
Würden wir das New weglassen, dann hätten wir lediglich eine Deklaration
Dim searcher As ManagementObjectSearcher
Dies weisst den Kompiler daraufhin, wieviel Speicher dem Objekt reserviert wird.
searcher ist momentan ein deklariertes aber nicht instanziertes Objekt.
Mit anderen Worten, es ist NOTHING.
Wollen wir mit diesem Objekt arbeiten, dann müssen wir es instanzieren:

der Konstruktor JEDER KLASSE ist NEW.
Daher
Dim searcher As New ManagementObjectSearcher
Der Konstruktor für ManagementObjectSearcher erlaubt die Übergabe einiger Parameter.
In meinem Beispiel Übergebe ich den ManagementScope und ObjectQuery als String.
Korrekterweise müsste es eigentlich so aussehen:
01.
 Dim search As New ManagementObjectSearcher() 
02.
            search.Query = New ObjectQuery("SELECT * FROM Win32_OperatingSystem") 
03.
            search.Scope = New ManagementScope("root\CIMV2")
Du siehst, auch ObjectQuery und ManagementScope sind Klassen. Um ein Objekt daraus zu erzeugen MUSS
man wieder das Schlüsselwort New verwenden.


Um .NET besser zu verstehen, solltest du vll selber mal eine ganz einfache Klasse schreiben.
Dich mit Schlüsselwörtern wie Shared, Private, Public, Inherit usw beschäftigen.
Dann kommt das Gespür für die Klassen und Objekte in .NET wie von selbst

Mit freundlichen Grüßen Mono
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...