求助:调试的问题。
本帖最后由 作者 于 2006-5-27 11:31:25 编辑 <br /><br /> <P>这是我编的一个选取实体来生成block的一段程序,但是当调试运行到:err=acdbGetObjectId(idsel,sget);</P><P>跳出上面的Find Symble的 对话框,"Please enter the path for acdbhdr.pdb"不知道什么意思。。。</P>
<P>并且编译以后,在cad中运行并不能生成图块,但是凭我的水平怎么也找不出问题了。</P>
<P>希望哪位大虾能帮帮我,先谢了。</P>
<P></P>
<P><BR>#include "StdAfx.h"<BR>#include "StdArx.h"<BR>#include "resource.h"<BR>#include "dbsymtb.h "<BR>#include "acedads.h"<BR>#include "dbmain.h"</P>
<P>// This is command 'SETLAYER'<BR>void Asdkpblock()</P>
<P>{</P>
<P> bool const openErasedEntity = false;<BR> bool const openErasedRec = false;<BR> ads_name sget;<BR> ads_point pt;<BR> AcDbObjectId idsel;<BR> AcDbEntity *entsel;<BR> Acad::ErrorStatus err;<BR> int rc=1;</P>
<P> AcDbBlockTableRecord *pSelRec=new AcDbBlockTableRecord;<BR> pSelRec->setName("firstblock");<BR> pSelRec->setOrigin(AcGePoint3d(0,0,0));<BR> while(rc)<BR> {<BR> rc=acedEntSel("\nplease select an entity:",sget,pt);<BR> switch(rc)<BR> {<BR> case RTNORM:<BR> err=acdbGetObjectId(idsel,sget);<BR> if(err!=Acad::eOk) <BR> {<BR> acutPrintf("\n Invalid ads_name.");<BR> return;<BR> }<BR> acutPrintf("\n ObjectId is %s",idsel);<BR> acdbOpenAcDbEntity(entsel,idsel,AcDb::kForRead,openErasedEntity); <BR> entsel->highlight();<BR> pSelRec->appendAcDbEntity(entsel);<BR> entsel->close();<BR> acedSSFree(sget);<BR> break;<BR> case RTERROR:<BR> acutPrintf("\n Invalid selection.");<BR> return;<BR> break;<BR> case RTCAN:<BR> acutPrintf("\n Selection over.");<BR> rc=0;<BR> break;<BR> } //End of switch.<BR> }</P>
<P> AcDbDatabase *pcurdb=NULL;<BR> AcDbBlockTable *pbTable;<BR> pcurdb=acdbHostApplicationServices()->workingDatabase();<BR> pcurdb->getBlockTable(pbTable,AcDb::kForWrite);<BR> pbTable->add(pSelRec);<BR> pbTable->close();<BR> pSelRec->close();<BR>}</P> <P>我的这个可以点选以生成块,</P>
<P>void test()<BR>{<BR> ads_name en;<BR> ads_point pt;<BR> int rt=1;<BR> Acad::ErrorStatus es;<BR> AcDbBlockTable *pBlockTable;<BR> acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable,AcDb::kForWrite);<BR> AcDbBlockTableRecord *pBlk=new AcDbBlockTableRecord;<BR> es=pBlk->setName("TestBlk");<BR> es=pBlk->setOrigin(AcGePoint3d(0,0,0));<BR>// -------------------<BR> while (rt)<BR> {<BR> rt=acedEntSel("\nSpecify a object:",en,pt);<BR> switch(rt)<BR> {<BR> case RTERROR:<BR> acutPrintf("\n Invalid selection.");<BR> break;<BR> case RTCAN:<BR> acutPrintf("\n Selection over.");<BR> rt=0;<BR> break;<BR> case RTNORM:<BR> AcDbObjectId eId;<BR> acdbGetObjectId(eId,en);<BR> AcDbEntity *pEnt=NULL,*pClone=NULL;<BR> es=acdbOpenAcDbEntity(pEnt,eId,AcDb::kForRead);<BR> pClone=AcDbEntity::cast(pEnt->clone());<BR> es=pBlk->appendAcDbEntity(eId,pClone);<BR> pBlockTable->add(eId,pBlk);<BR> pEnt->close();<BR> pClone->close();<BR> break;<BR> }<BR> }<BR>// ------------------------<BR> pBlk->close();<BR> pBlockTable->close();<BR>}</P> <P>呵呵,谢谢,想明白是什么问题了。</P>
<P>还有一个问题是:当在调试模式下面,运行到acdbGetObjectId()时,会跳出一个Find Symble对话框,提示:"Please enter the path for acdbhdr.pdb" 不知道什么意思。。。</P>
<P>不知各位碰到过没有。我选择的 结束 ,没有理它,但是并不影响程序的运行。如果不在调试模式下,就不会出现这个问题。</P>
<P>我用的是vc++6.0和acad2002。</P> <P>我也不知道,我也是半桶水,应该还没有半桶昵,</P>
<P>我用的也是 VC6+CAD2002的了</P>
<P>有机会一起来学习啊</P> <P>好啊好啊。。。。</P>
<P>其实觉得学objectarx也不难,有帮助文档就可以啦。现在开始有整体的感觉了。</P>
页:
[1]