下面是我正在处理的一些代码片段,是我正在处理的python arx包装器的代码片段,除非我以最好的方式解决这个问题,否则它将是这个链条中的薄弱环节!
当使用Python来回传递指针时,您以这种方式将指针包装在CPyObject(基本上是void*的容器)中代码0]
其中“del_ent”是指向用于清理的删除函数的函数。
这样,Python就有了一个指向新数据库实体的指针,可以做它需要做的事情,但是,一旦你返回到主机应用程序,Python就需要做它的清理工作,这就是我到目前为止所做的工作,它可以工作,但我不满意它-
- static void del_ent(void* ptr)
- {
- /* just return and python will be happy, again, we need
- to be careful with this as we could easily create a memory leak! */
- AcDbEntity* e = (AcDbEntity*)ptr;
- //e->upgradeOpen();
- if(e->blockId() == AcDbObjectId::kNull) // it's not a db resident, we can delete it.
- delete ptr;
- //e->close();
- return;
- }
问题是文档说如果指针没有打开,就不应该“访问”指针,在实体没有打开的情况下使用e->BlockId()会违反规则吗??(好像很管用...)
有没有更好的方法可以在不打开的情况下检查实体/对象是否属于db?
谢谢。米克。
本帖以下内容被隐藏保护;需要你回复后,才能看到! 游客,如果您要查看本帖隐藏内容请 回复 |