![]() |
【转帖】[求助][arx]来看看代码,运行两次cad就崩溃
[求助][arx]来看看代码,运行两次cad就崩溃
[求助][arx]来看看代码,运行两次cad就崩溃 照搬照抄了一个addline的小程序,加载后在cad中使用该命令绘制line后无显示,但命令行提示success,第二次使用后cad崩溃,请教一下是怎么回事情,谢谢了,代码如下: // ex03.cpp : 定义 dll 应用程序的入口点。 // #include "stdafx.h" #include <adslib.h> #include <rxdlinkr.h> #include <aced.h> #include <dbents.h> #include <geassign.h> #include <dbsymtb.h> #include <dbapserv.h> //----------------------------------------------------------------------------- //----- dll entry point acad::errorstatus posttodatabase(acdbentity* pent,acdbobjectid& idobj) { acad::errorstatus es; acdbblocktable* pblocktable; acdbblocktablerecord* pspacerecord; if(acdbhostapplicationservices()->workingdatabase()==null) return acad::enodatabase; if ((es=acdbhostapplicationservices()->workingdatabase()->getblocktable(pblocktable,acdb::kforread))==acad::eok) { if((es==pblocktable->getat(acdb_model_space,pspacerecord,acdb::kforwrite))==acad::eok) { if((es=pspacerecord->appendacdbentity(idobj,pent))==acad::eok) pent->close(); pspacerecord->close(); } pblocktable->close(); } return es; } //----------------------------------------------------------------- acad::errorstatus newline() { ads_point pt1,pt2; int retval; try { if((retval=acedgetpoint(null, "\nselect lower left:",pt1))!=rtnorm) throw retval; if((retval=acedgetpoint(pt1,"\nselect upper right:",pt2))!=rtnorm) throw retval; } catch (int e) { if(e==rtcan) return acad::euserbreak ; if(e==rterror) return acad::einvalidinput ; } acdbline* pline =new acdbline(aspnt3d(pt1),aspnt3d(pt2)); if(!pline) { acedalert("not enough memory to create a line!"); return acad::eoutofmemory ; } acdbobjectid id; return posttodatabase(pline,id); } //------------------------------------------------------------------------ void addlinecommand() { if(newline()==acad::eok) acutprintf("success\n"); else acutprintf("failed\n"); } //------------------------------------------------------------------------- extern "c" acrx::appretcode acrxentrypoint(acrx::appmsgcode msg, void*pkt) { switch(msg) { case acrx::kinitappmsg: acrxdynamiclinker->unlockapplication(pkt); acrxdynamiclinker->registerappmdiaware(pkt); //注册命令 acedregcmds->addcommand("exam03","addline","addline",acrx_cmd_modal,addlinecommand); break; case acrx::kunloadappmsg: acedregcmds->removegroup("exam03"); break; } return acrx::kretok; } //------------------------------------------------------------------------ bool apientry dllmain( handle hmodule, dword ul_reason_for_call, lpvoid lpreserved ) { return true; } if((es==pblocktable->getat(acdb_model_space,pspacerecord,acdb::kforwrite))==acad::eok) 这句有问题 if((es=pblocktable->getat(acdb_model_space,pspacerecord,acdb::kforwrite))==acad::eok) 多了一个=号,语法上检查不出来,谢谢了! |
所有的时间均为北京时间。 现在的时间是 10:10 PM. |