hact 发表于 2006-11-20 16:46:00

[求助][ARX]来看看代码,运行两次CAD就崩溃

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

fylinwater 发表于 2006-11-21 09:05:00

if((es==pBlockTable-&gt;getAt(ACDB_MODEL_SPACE,pSpaceRecord,AcDb::kForWrite))==Acad::eOk)<BR>这句有问题

hact 发表于 2006-11-21 10:27:00

<P>if((es=pBlockTable-&gt;getAt(ACDB_MODEL_SPACE,pSpaceRecord,AcDb::kForWrite))==Acad::eOk)</P>
<P>多了一个=号,语法上检查不出来,谢谢了!</P>
页: [1]
查看完整版本: [求助][ARX]来看看代码,运行两次CAD就崩溃