王咣生 发表于 2004-11-12 12:09:00

请问关于eLockViolation

当pent->upgradeOpen();时返回 eLockViolation时应该怎么办?



对eLockViolation错误应该如何对待?

zfbj 发表于 2004-11-12 12:25:00

我觉得这个还是要根据你的上下文环境而定。你是在什么情况下出现上面的错误的?

王咣生 发表于 2004-11-12 12:40:00

回复

以前明明是这样用可以的,<BR>AcDbEntity *pEntity;<BR>acdbOpenAcDbEntity(pEntity, objId, AcDb::kForRead);


...<BR>AcDbLine *pLine = (AcDbLine*)pEnt;<BR>pLine-&gt;upgradeOpen();<BR>pLine-&gt;erase();<BR>pLine-&gt;close();


这句pLine-&gt;upgradeOpen();的返回值以前没有考虑过eLockViolation,


现在我对处理后的图形(从其它dwg clone到当前文档)做同样步骤的操作,<BR>pLine-&gt;upgradeOpen();返回值就为eLockViolation了.

王咣生 发表于 2004-11-12 12:49:00

回复

我是在DockBar上通过Button调用命令的, 我查了一下,可能需要AcAxDocLock 来Lock文档.

王咣生 发表于 2004-11-12 14:47:00

回复

知道了,


如果是DockControBar或modeless窗体, 在调用acdbOpenObject, acdbOpenAcDbEntity等函数时, 要在处理前


acDocManager-&gt;lockDocument(curDoc(),AcAp::kWrite,NULL,NULL,true);


调用结束后


acDocManager-&gt;unlockDocument(curDoc());

js93105 发表于 2005-4-24 13:07:00

太棒了,困扰了我两天的问题终于解决了。多谢楼上的回复。我是在无模式对话框中用了wblock函数,结果也是遇到了<b>eLockViolation的错误,我都快绝望了,终于在这找到了解决办法。</b><BR>

rackyye 发表于 2005-4-29 03:21:00

对于锁定文档,ARX中是这样解释的,当你要修改一个不是当前文档的数据库时,或者你要阻止别的执行文本来修改该数据库时,你需要锁定文档。如果是以只读方式打开某个对象是不用锁定文档的,但是以写方式打开对象时,最好锁定文档。

guanxiancad2006 发表于 2010-8-11 16:27:00

<p align="left">當你要修改文檔內容或資料庫時需要以寫入的方式打開,需要先進行圖檔的鎖定<br/>Dim&nbsp;documentLock&nbsp;As&nbsp;DocumentLock&nbsp;=&nbsp;Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument()<br/>...<br/>documentLock.Dispose()<br/><br/>若只是讀取圖檔的圖檔資訊,就不需要鎖定圖檔。</p>

houdy 发表于 2010-8-16 22:30:00

<p>关于文档的Lock,可以参阅SDK中关于Documet Context和Application Context. 在Application Context下,例如非模态对话框,属性面板(AutCAD封装的非模态对话框), COM环境,如果想对Document进行写操作就需要首先Lock这个文档,在结束的时候解锁这个文档。AutCAD在执行一个命令的时候,在命令开始执行前会自动Lock文档,这就是为什么我们在命令中不用关心Lock 文档的原因。</p>
<p>AcAxDocLock 最好用在COM环境中,因为这个类就是专门为COM环境编写的,在其他的环境下可以使用acDocManager-&gt;lockDocument().</p>

yanglin112 发表于 2013-5-31 14:27:39

原来是这样子啊,学习啦
页: [1]
查看完整版本: 请问关于eLockViolation