Exception de violation d’access lorsque la méthode Marshal.PtrToStructure est utilisée dans une boucle

Dans mon programme (C #), j’ai utilisé la méthode Marshal.PtrToStructure pour convertir un object et append une adresse mémoire à structurer dans une boucle. Au premier élément, ce travail est normal. Mais au deuxième élément, l’exception de violation d’access se produit.

L’exception de violation d’access ne se produit que sur Win 7 (64 bits), elle ne se produit pas sur Win xp (32 bits).

Je ne sais pas cause et solution pour cela.

Aidez-moi, s’il vous plaît.

Remarque: j’utilise .NET Framework 3.5.

Code comme ci-dessous:

[StructLayout(LayoutKind.Sequential)] public struct gpc_vertex { public float x; public float y; }; private ArrayList DoPolygonOperation() { IntPtr currentVertex = vertexList.vertexes; gpc_vertex oVertext = new gpc_vertex(); for (int j = 0; j < vertexList.num_vertices; j++) { PositionF pos = new PositionF(); oVertext = (gpc_vertex)Marshal.PtrToStructure(currentVertex, typeof(gpc_vertex)); //Access violation exception pos.X = oVertext.x; pos.Y = oVertext.y; Marshal.DestroyStructure(currentVertex, typeof(gpc_vertex)); currentVertex = (IntPtr)((int)currentVertex.ToInt64() + Marshal.SizeOf(oVertext)); posList.Add(pos); } } 

Merci.

    Lorsque je change de code, la violation d’access ne se produit pas. Cependant, je ne comprends pas la cause première de ce problème. Quelle exception de violation d’access se produit?

    Code modifier comme ci-dessous:

     private ArrayList DoPolygonOperation() { IntPtr currentVertex = vertexList.vertexes; gpc_vertex oVertext = new gpc_vertex(); int currentOffset = 0; for (int j = 0; j < vertexList.num_vertices; j++) { PositionF pos = new PositionF(); oVertext = (gpc_vertex)Marshal.PtrToStructure((IntPtr)(currentVertex.ToInt64() + currentOffset), typeof(gpc_vertex)); pos.X = oVertext.x; pos.Y = oVertext.y; Marshal.DestroyStructure(currentVertex, typeof(gpc_vertex)); currentOffset += Marshal.SizeOf(oVertext); posList.Add(pos); } }