C# GrupsSellator尝试读取或写入受保护的内存

C# GrupsSellator尝试读取或写入受保护的内存,c#,access-violation,glu,C#,Access Violation,Glu,我在使用GrupsSellator时在GrupsVertexproc回调中随机遇到访问冲突异常,有人能帮忙吗?非常感谢!以下是主要代码: public partial class Tessellation { [UnmanagedFunctionPointerAttribute(CallingConvention.StdCall)] public delegate void GLUtessVertexProc(IntPtr data); priv

我在使用
GrupsSellator
时在
GrupsVertexproc
回调中随机遇到访问冲突异常,有人能帮忙吗?非常感谢!以下是主要代码:

public partial class Tessellation
    {
        [UnmanagedFunctionPointerAttribute(CallingConvention.StdCall)]
        public delegate void GLUtessVertexProc(IntPtr data);

    private List<Vector3> _buf = new List<Vector3>();
    private static readonly GLUtessVertexProc tessVertex = data => {
        double* dt = (double*)data;
        //exception occur...
        _buf.Add(new Vector3(dt[0], dt[1], dt[2]));
    };

    public List<Vector3> Tessellate(List<Vector3> outerBound)
    {
        _buf.Clear();

        GLUtesselator tess = GLU.gluNewTess();
        GLU.gluTessCallback(tess, GLU.GLU_TESS_BEGIN, tessBegin);
        GLU.gluTessCallback(tess, GLU.GLU_TESS_END, tessEnd);
        GLU.gluTessCallback(tess, GLU.GLU_TESS_ERROR, tessError);
        GLU.gluTessCallback(tess, GLU.GLU_TESS_VERTEX, tessVertex);
        GLU.gluTessCallback(tess, GLU.GLU_TESS_COMBINE, tessCombine);
        GLU.gluTessCallback(tess, GLU.GLU_TESS_EDGE_FLAG, tessEdgeFlag);
        GLU.gluTessProperty(tess, GLU.GLU_TESS_WINDING_RULE, GLU.GLU_TESS_WINDING_ODD);
        GLU.gluTessBeginPolygon(tess, IntPtr.Zero);
        //vertex data
        GLU.gluTessEndPolygon(tess);
        GLU.gluDeleteTess(tess);

        return _buf.ToList();
    }

}
公共部分类细分
{
[非托管FunctionPointerAttribute(CallingConvention.StdCall)]
公共代表(IntPtr数据);
私有列表_buf=新列表();
私有静态只读GlussVertexProc tessVertex=data=>{
double*dt=(double*)数据;
//发生异常。。。
_buf.Add(新向量3(dt[0],dt[1],dt[2]);
};
公共列表镶嵌(列表外部边界)
{
_buf.Clear();
麸质磨砂机tess=GLU.Glunewess();
GLU.GLU面筋回调(苔丝,GLU.GLU苔丝,苔丝,苔丝);
谷氨酸谷朊酸返排(苔丝,谷氨酸谷朊酸端,苔丝端);
GLU.GlussCallback(苔丝,GLU.GLU_苔丝错误,苔丝错误);
GLU.GLU面筋回缩(苔丝,GLU.GLU_苔丝顶点,苔丝顶点);
GLU.麸质回缩(苔丝,GLU.GLU_苔丝_组合,苔丝组合);
GLU.GLU面筋回缩(苔丝,GLU.GLU_苔丝边缘标志,苔丝边缘标志);
GLU.GLU属性(tess,GLU.GLU_tess_缠绕规则,GLU.GLU_tess_缠绕奇数);
GLU.GlussBeginPolygon(tess,IntPtr.Zero);
//顶点数据
GLU.面筋多边形(tess);
GLU.gluDeleteTess(苔丝);
return _buf.ToList();
}
}

当我使用dllimport从glu.dll导入命令时,我遇到了与您相同的问题。我没有设法解决它。最后,我在这里找到了GLU tesselation的C#端口:,我直接使用它,而不是从dll导入


这个图书馆足够满足我的需要。这可能是您的一种解决方案。

我看不到您在哪里设置互操作,也看不到您在哪里调用
tessVertex
。非常感谢,我会尽快尝试。该库可以工作,但在渲染复杂多边形时性能很差。无论如何,谢谢你。