[求助][ARX]来看看代码,运行两次CAD就崩溃
<P>照搬照抄了一个addline的小程序,加载后在CAD中使用该命令绘制line后无显示,但命令行提示success,第二次使用后CAD崩溃,请教一下是怎么回事情,谢谢了,代码如下:</P><P>// ex03.cpp : 定义 DLL 应用程序的入口点。<BR>//</P>
<P>#include "stdafx.h"<BR>#include <adslib.h><BR>#include <rxdlinkr.h><BR>#include <aced.h><BR>#include <dbents.h><BR>#include <geassign.h><BR>#include <dbsymtb.h><BR>#include <dbapserv.h><BR>//-----------------------------------------------------------------------------<BR>//----- DLL Entry Point<BR>Acad::ErrorStatus<BR>postToDatabase(AcDbEntity* pEnt,AcDbObjectId& idObj)<BR>{<BR> Acad::ErrorStatus es;<BR> AcDbBlockTable* pBlockTable;<BR> AcDbBlockTableRecord* pSpaceRecord;<BR> if(acdbHostApplicationServices()->workingDatabase()==NULL)<BR> return Acad::eNoDatabase;<BR> if ((es=acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead))==Acad::eOk)<BR> {<BR> if((es==pBlockTable->getAt(ACDB_MODEL_SPACE,pSpaceRecord,AcDb::kForWrite))==Acad::eOk)<BR> {<BR> if((es=pSpaceRecord->appendAcDbEntity(idObj,pEnt))==Acad::eOk)<BR> pEnt->close();<BR> pSpaceRecord->close();<BR> }<BR> pBlockTable->close();<BR> }<BR> return es;<BR>}<BR>//-----------------------------------------------------------------<BR>Acad::ErrorStatus newLine()<BR>{<BR> ads_point pt1,pt2;<BR> int retval;<BR> try<BR> {<BR> if((retval=acedGetPoint(NULL, "\nSelect lower left:",pt1))!=RTNORM)<BR> throw retval;<BR> if((retval=acedGetPoint(pt1,"\nSelect upper right:",pt2))!=RTNORM)<BR> throw retval;<BR> }<BR> catch (int e)<BR> {<BR> if(e==RTCAN)<BR> return Acad::eUserBreak ;<BR> if(e==RTERROR)<BR> return Acad::eInvalidInput ;<BR> }<BR> AcDbLine* pLine =new AcDbLine(asPnt3d(pt1),asPnt3d(pt2));<BR> if(!pLine)<BR> {<BR> acedAlert("Not enough memory to create a Line!");<BR> return Acad::eOutOfMemory ;<BR> }</P>
<P><BR> AcDbObjectId id;<BR> return postToDatabase(pLine,id);</P>
<P>}</P>
<P><BR>//------------------------------------------------------------------------<BR>void addLineCommand()<BR>{<BR> if(newLine()==Acad::eOk)<BR> acutPrintf("Success\n");<BR> else<BR> acutPrintf("Failed\n");<BR>}</P>
<P>//-------------------------------------------------------------------------</P>
<P>extern "C" AcRx::AppRetCode<BR>acrxEntryPoint(AcRx::AppMsgCode msg, void*pkt)<BR>{<BR> switch(msg)<BR> {<BR> case AcRx::kInitAppMsg:<BR> acrxDynamicLinker->unlockApplication(pkt);<BR> acrxDynamicLinker->registerAppMDIAware(pkt);<BR> //注册命令<BR> acedRegCmds->addCommand("EXAM03","addline","addline",ACRX_CMD_MODAL,addLineCommand);<BR> break;<BR> case AcRx::kUnloadAppMsg:<BR> acedRegCmds->removeGroup("EXAM03");<BR> break;<BR> }<BR> return AcRx::kRetOK;<BR>}</P>
<P>//------------------------------------------------------------------------</P>
<P>BOOL APIENTRY DllMain( HANDLE hModule, <BR> DWORD ul_reason_for_call, <BR> LPVOID lpReserved<BR> )<BR>{<BR> return TRUE;<BR>}</P> if((es==pBlockTable->getAt(ACDB_MODEL_SPACE,pSpaceRecord,AcDb::kForWrite))==Acad::eOk)<BR>这句有问题 <P>if((es=pBlockTable->getAt(ACDB_MODEL_SPACE,pSpaceRecord,AcDb::kForWrite))==Acad::eOk)</P>
<P>多了一个=号,语法上检查不出来,谢谢了!</P>
页:
[1]