私のプログラム (C#) では、メソッド Marshal.PtrToStructure を使用して、オブジェクトの追加メモリ アドレスをループ内の構造体に変換しました。最初の要素では、これは正常に機能します。しかし、2 番目の要素で、アクセス違反の例外が発生します。
アクセス違反の例外は、win 7 (64 ビット) でのみ発生し、win xp (32 ビット) では発生しません。
その原因と解決策がわかりません。
私を助けてください。
注: .NET Framework 3.5 を使用しています。
コードは次のとおりです。
[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);
}
}
ありがとう。