请问关于eLockViolation
当pent->upgradeOpen();时返回 eLockViolation时应该怎么办?对eLockViolation错误应该如何对待? 我觉得这个还是要根据你的上下文环境而定。你是在什么情况下出现上面的错误的?
回复
以前明明是这样用可以的,<BR>AcDbEntity *pEntity;<BR>acdbOpenAcDbEntity(pEntity, objId, AcDb::kForRead);...<BR>AcDbLine *pLine = (AcDbLine*)pEnt;<BR>pLine->upgradeOpen();<BR>pLine->erase();<BR>pLine->close();
这句pLine->upgradeOpen();的返回值以前没有考虑过eLockViolation,
现在我对处理后的图形(从其它dwg clone到当前文档)做同样步骤的操作,<BR>pLine->upgradeOpen();返回值就为eLockViolation了.
回复
我是在DockBar上通过Button调用命令的, 我查了一下,可能需要AcAxDocLock 来Lock文档.回复
知道了,如果是DockControBar或modeless窗体, 在调用acdbOpenObject, acdbOpenAcDbEntity等函数时, 要在处理前
acDocManager->lockDocument(curDoc(),AcAp::kWrite,NULL,NULL,true);
调用结束后
acDocManager->unlockDocument(curDoc()); 太棒了,困扰了我两天的问题终于解决了。多谢楼上的回复。我是在无模式对话框中用了wblock函数,结果也是遇到了<b>eLockViolation的错误,我都快绝望了,终于在这找到了解决办法。</b><BR> 对于锁定文档,ARX中是这样解释的,当你要修改一个不是当前文档的数据库时,或者你要阻止别的执行文本来修改该数据库时,你需要锁定文档。如果是以只读方式打开某个对象是不用锁定文档的,但是以写方式打开对象时,最好锁定文档。 <p align="left">當你要修改文檔內容或資料庫時需要以寫入的方式打開,需要先進行圖檔的鎖定<br/>Dim documentLock As DocumentLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument()<br/>...<br/>documentLock.Dispose()<br/><br/>若只是讀取圖檔的圖檔資訊,就不需要鎖定圖檔。</p> <p>关于文档的Lock,可以参阅SDK中关于Documet Context和Application Context. 在Application Context下,例如非模态对话框,属性面板(AutCAD封装的非模态对话框), COM环境,如果想对Document进行写操作就需要首先Lock这个文档,在结束的时候解锁这个文档。AutCAD在执行一个命令的时候,在命令开始执行前会自动Lock文档,这就是为什么我们在命令中不用关心Lock 文档的原因。</p>
<p>AcAxDocLock 最好用在COM环境中,因为这个类就是专门为COM环境编写的,在其他的环境下可以使用acDocManager->lockDocument().</p> 原来是这样子啊,学习啦
页:
[1]