Veröffentlicht 14. Januar 201510 j Hallo Leute, bei mir kommt es bei follgendem Code zu einer "AccessViolationException". Dim stDMVar_Filter As DllCallsAndTypes.ODK.DataManager.DM_VARFILTER stDMVar_Filter.dwFlags = DM_VARFILTER_ENUM.DM_VARFILTER_NAME stDMVar_Filter.dwNumTypes = 0 stDMVar_Filter.lpszConn = "" stDMVar_Filter.lpszGroup = "" stDMVar_Filter.lpszName = "*" stDMVar_Filter.pdwTypes = IntPtr.Zero Dim ptrVarFilter As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(GetType(DM_VARFILTER))) Marshal.StructureToPtr(stDMVar_Filter, ptrVarFilter, True) '<-- HIER EXCEPTION Die Deklaration in C von der Struktur ist diese: typedef struct { DWORD dwFlags; DWORD dwNumTypes; LPDWORD pdwTypes; LPSTR lpszGroup; LPSTR lpszName; LPSTR lpszConn; } DM_VARFILTER; In VB habe ich die Struktur wie follgt angelegt: <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)> Public Structure DM_VARFILTER <MarshalAs(UnmanagedType.U4)> Public dwFlags As DM_VARFILTER_ENUM '4 004 <MarshalAs(UnmanagedType.U4)> Public dwNumTypes As UInt32 '4 008 Public pdwTypes As System.IntPtr '4 012 <MarshalAs(UnmanagedType.LPStr)> Public lpszGroup As [String] '4 016 <MarshalAs(UnmanagedType.LPStr)> Public lpszName As [String] '4 020 <MarshalAs(UnmanagedType.LPStr)> Public lpszConn As [String] '4 024 End Structure Wenn ich die Struktur ausrechne, komme ich auf 24 Byte. Diese werden auch mit Marshal.AllocHGlobal alloziert (siehe Bildchen im Anhang). Was habe ich nicht beachtet, dass es zu einer Access Violation kommt. vG raiserle
14. Januar 201510 j On the first call to the StructureToPtr method after a memory block has been allocated, fDeleteOld must be false, because there are no contents to clear. 12345
14. Januar 201510 j Autor Ok, hatte ich nicht gelesen. Danke. Aber: Dann müsste doch die Exception immer auftreten? Aber das oben beschriebene tritt nicht immer auf.
14. Januar 201510 j Im finsteren Unmanaged-Land gibt es etwas, das sich "undefiniertes Verhalten" nennt. Das heißt, kaputter Code kann funktionieren, er kann dir aber auch um die Ohren fliegen. Oder die Festplatte formatieren.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.