0

我正在编写一个插件来尽可能多地从 CAD 中提取数据。我现在遇到的主要问题是当我尝试访问 StartPoint.X 时,例如,脚本失败而没有捕获异常,“致命错误:d8e176b4h 处未处理的访问冲突读取 0xffffffff”。根据我尝试访问的内容,内存位置和第二个数字的变化。例子:

    foreach (Objects o in globalListOfObjs)
        {
            string type = o.obj.GetType().ToString().Split('.').Last();

            if (type == "Line")
            {
                try
                {
                    Line l = (Line)o.obj;
                    if (l != null)
                    {
                        MessageBox.Show("Not Null!");
                        MessageBox.Show(l.StartPoint.X.ToString());
                    }
                    //listOfLines.Add(new LinkLines(lx1, ly1, lx2, ly2, Guid.NewGuid()));
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    MessageBox.Show(ex.StackTrace);
                }

            }
       }
4

3 回答 3

0

您的代码是否在主线程中运行?AutoCAD 不支持多线程。

于 2015-02-19T08:22:51.800 回答
0

仅当用于打开对象的事务仍处于活动状态时,才能安全地访问对象。如果您需要存储对对象的引用,请存储 ObjectId 并在需要访问对象属性时启动新事务。

于 2015-02-20T14:17:09.783 回答
0

尝试这样的事情:

public void getStartPoint(Transaction oTr, ObjectId oId)
{
    try {
        Line oLn = (Line)oTr.GetObject(oId, OpenMode.ForRead);

        if (oLn != null) {
            Interaction.MsgBox(oLn.StartPoint.X.ToString);
        }

    } catch (System.Exception ex) {
        Interaction.MsgBox(ex.StackTrace, (MsgBoxStyle)MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, ex.Message);
    }
}
于 2015-02-19T17:12:47.950 回答