Bei der ausführung des unten aufgeführten Codes Tritt die Fehlermeldung
Zitat: |  |
FatalExecutionEngineError wurde erkannt.
Message: Die Laufzeit hat einen schwerwiegenden Fehler entdeckt. Fehleradresse: "0x792d884c" in Thread "0xe18". Fehlercode: 0xc0000005. Bei diesem Fehler könnte es sich um ein Problem in der CLR oder in den unsicheren oder nicht verifizierbaren Teilen des Benutzercodes handeln. Übliche Ursachen dieses Bugs sind Marshallerfehler für COM-Interop oder PInvoke, die den Stapel beschädigen können.
|  |
auf.
Leider komm ich bei der Fehleranalyse nicht weiter. Sieht für mich alles so aus als sollte es eigentlich funktionieren.
Hat vielleicht jemand einen Tip warum ich diesen Fehler bekomme und wie ich das Problem beheben kann?
Das Programm soll alle im Netzwerk verfügbaren Computer auflisten.
Imports System.Runtime.InteropServices
Module Module1
Private Declare Unicode Function NetServerEnum Lib "netapi32.dll" _
(ByVal Servername As IntPtr, _
ByVal Level As Integer, _
ByRef bufptr As IntPtr, _
ByVal PrefMaxLen As Integer, _
ByRef entriesread As Integer, _
ByRef TotalEntries As Integer, _
ByVal serverType As Integer, _
ByVal Domain As IntPtr, _
ByVal ResumeHandle As IntPtr) As Integer
Declare Unicode Function NetApiBufferFree Lib "netapi32.dll" _
(ByRef buffer As IntPtr) As Long
Public Structure _SERVER_INFO_100
Friend sv100_platform_id As Integer
<MarshalAs(UnmanagedType.LPWStr)> Friend sv100_name As String
End Structure
Public Function GetNetworkComputers() As ArrayList
Dim networkComputers As New ArrayList()
Const MAX_PREFERRED_LENGTH As Integer = -1
Dim SV_TYPE_WORKSTATION As Integer = 1
Dim SV_TYPE_SERVER As Integer = 2
Dim buffer As IntPtr = IntPtr.Zero
Dim tmpBuffer As IntPtr = IntPtr.Zero
Dim entriesRead As Integer = 0
Dim totalEntries As Integer = 0
Dim resHandle As Integer = 0
Dim sizeofINFO As Integer = Marshal.SizeOf(GetType(_SERVER_INFO_100))
Try
Dim ret As Integer = NetServerEnum(Nothing, 100, buffer, _
MAX_PREFERRED_LENGTH, entriesRead, totalEntries, _
SV_TYPE_WORKSTATION Or _
SV_TYPE_SERVER, Nothing, _
resHandle)
If ret = 0 Then
For i As Integer = 0 To totalEntries
tmpBuffer = New IntPtr(CType(buffer, Integer) + (i * _
sizeofINFO))
Dim svrInfo As _SERVER_INFO_100 = CType( _
Marshal.PtrToStructure(tmpBuffer, GetType( _
_SERVER_INFO_100)), _SERVER_INFO_100) ' <<< *** HIER
' TRITT DER FEHLER AUF! ***
networkComputers.Add(svrInfo.sv100_name)
Next
End If
Catch ex As Exception
Console.WriteLine("Error getting network computers.")
Finally
NetApiBufferFree(buffer)
End Try
Return networkComputers
End Function
Sub Main()
Dim networkComps As ArrayList = GetNetworkComputers()
For Each Str As String In networkComps
Console.WriteLine(Str)
Next
End Sub
End Module
Beitrag wurde zuletzt am 21.11.10 um 23:29:00 editiert. |