2

私のプログラム (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);
    }
}

ありがとう。

4

1 に答える 1