几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(C++)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-16, 10:17 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】多文档范例的问题

多文档范例的问题
多文档范例的问题
exam11.cpp
#include "rxobject.h"
#include "rxregsvc.h"
#include "rxdlinkr.h"
#include "rxditer.h"
#include "aced.h"
#include "dbmain.h"
#include "dbdict.h"
#include "dbidmap.h"
#include "dbapserv.h"
#include "adslib.h"
#include "acdocman.h"
/*
void assoclines();
void addtomodelspace(acdbobjectid&,acdbentity *);
void initapp(void);
void unloadapp(void);
void printdbevent(const acdbobject *pobj,
const char *pevent);
extern "c"
acrx::appretcode
acrxentrypoint(acrx::appmsgcode,void *);
*/
long gentacc=0;
void printdbevent(const acdbobject *,const char * eventstr);
void printobj(const acdbobject * pobj);
void watchdb();
void clearreactors();
extern "c"
acrx::appretcode acrxentrypoint(acrx::appmsgcode ,void *);
class mydbreactor;
class mydocreactorublic acapdocmanagerreactor
{
public:
virtual void documenttobeactivated(acapdocument * pdoc);
virtual void documentcreated(acapdocument * pdoc);
virtual void documenttobedestroyed(acapdocument * pdoc);
};
class myperdocdata
{
friend class myappdocglobals;
public:
myperdocdata(acapdocument * pdoc);
private:
acapdocument * m_pdoc;
myperdocdata * m_pnext;
long m_entacc;
mydbreactor * m_pdbr;
};
class myappdocglobals
{
public:

myappdocglobals(acapdocument *pdoc);
void setglobals(acapdocument *pdoc);
void removedocglobals(acapdocument * pdoc);
void removealldocglobals(myperdocdata * ptarget);
void unload();
long &entitycount();
void incremententitycount();
void decremententitycount();
mydbreactor * gpreactor();
void setdbreactor(mydbreactor *pdb);
private:
myperdocdata *m_phead;
myperdocdata *m_pdata;
mydocreactor *m_pdocreactor;
};
myappdocglobals *gpmyappdocglobals;
class mydbreactorublic acdbdatabasereactor
{
public:
virtual void objectappended(const acdbdatabase * dwg,
const acdbobject *dbobj);
virtual void objectmodified(const acdbdatabase * dwg,
const acdbobject * dbobj);
virtual void objecterased(const acdbdatabase *dwg,
const acdbobject *dbobj,
adesk::boolean perased);
};
void mydbreactor:bjectappended(const acdbdatabase * db,
const acdbobject *pobj)
{

printdbevent(pobj,"objectappended");
acutprintf("db==%lx\n",(long)db);
gentacc++;
acutprintf("entity count=%d\n",gentacc);
}
void mydbreactor:bjectmodified(const acdbdatabase * db,
const acdbobject *pobj)
{
printdbevent(pobj,"objectmodified");
acutprintf("db==%ls\n",(long)db);
}
void mydbreactor:bjecterased(const acdbdatabase *db,
const acdbobject *pobj,
adesk::boolean perased)
{
if(perased)
{
printdbevent(pobj,"objecterased");
gentacc--;
}
else
{
printdbevent(pobj,"object(un)erased");
gentacc++;
}
acutprintf("db==%lx\n",(long)db);
acutprintf("entity count=%d\n",gentacc);
}
void printdbevent(const acdbobject *pobj,
const char *pevent)
{
acutprintf("event:acdbdatabasereactor::%s",pevent);
printobj(pobj);
}
void printobj(const acdbobject *pobj)
{
if(pobj==null)
{
acutprintf("(null)");
return;
}
acdbhandle objhand;
char handbuf[17];
pobj->getacdbhandle(objhand);
objhand.getintoasciibuffer(handbuf);
acutprintf("\n (class==%s,handle==%s,id=%lx,db==%lx)",
pobj->isa()->name(),handbuf,
pobj->objectid().asoldid(),pobj->database());
}
void mydocreactor::documenttobeactivated(acapdocument *pdoc)
{
gpmyappdocglobals->setglobals(pdoc);
}
void mydocreactor::documenttobedestroyed(acapdocument *pdoc)
{
gpmyappdocglobals->removedocglobals(pdoc);
}
void mydocreactor::documentcreated(acapdocument *pdoc)
{
gpmyappdocglobals->setglobals(pdoc);
}
myperdocdata::myperdocdata(acapdocument *pdoc)
{
m_pdoc=pdoc;
m_pnext=null;
m_entacc=0;
m_pdbr=null;
}
myappdocglobals::myappdocglobals(acapdocument *pdoc)
{
m_pdata=m_phead=null;
m_pdocreactor=new mydocreactor();
acdocmanager->addreactor(m_pdocreactor);
}
void myappdocglobals::setglobals(acapdocument *pdoc)
{
myperdocdata *p_data=m_phead,*prev_data=m_phead;
while(p_data!=null)
{
if(p_data->m_pdoc==pdoc)
{
m_pdata=p_data;
break;
}
prev_data=p_data;
p_data=p_data->m_pnext ;
}
if(p_data==null)
{
if(m_phead==null)
{
m_phead=m_pdata=new myperdocdata(pdoc);
}
else
{
prev_data->m_pnext=m_pdata=new myperdocdata(pdoc);
}
}
}
void myappdocglobals::removedocglobals(acapdocument * pdoc)
{
myperdocdata *p_data=m_phead,*prev_data=m_phead;
while(p_data!=null)
{
if(p_data->m_pdoc=pdoc)
{
if(p_data==m_phead)
{
m_phead=p_data->m_pnext;
}
else
{
prev_data->m_pnext=p_data->m_pnext;
}
if(m_pdata==p_data)
{
m_pdata=m_phead;
}
delete p_data;
break;
}
prev_data=p_data;
p_data=p_data->m_pnext;
}
}

void myappdocglobals::removealldocglobals (myperdocdata * p_target)
{
if(p_target==null)
{
return;
}
if(p_target->m_pnext!=null)
{
removealldocglobals(p_target->m_pnext );
}
if(p_target->m_pdbr!=null)
{
acdbhostapplicationservices()->workingdatabase()
->removereactor(p_target->m_pdbr );
delete p_target->m_pdbr;
p_target->m_pdbr=null;
}
delete p_target;
}
void myappdocglobals::unload()
{
acdocmanager->removereactor(m_pdocreactor);
delete m_pdocreactor;
removealldocglobals(m_phead);
m_phead=m_pdata=null;
}
long & myappdocglobals::entitycount()
{
return m_pdata->m_entacc;
}
void myappdocglobals::incremententitycount()
{
m_pdata->m_entacc++;
}
void myappdocglobals::decremententitycount()
{
m_pdata->m_entacc--;
}
mydbreactor * myappdocglobals::gpreactor()
{
return m_pdata->m_pdbr;
}
void myappdocglobals::setdbreactor(mydbreactor *pdb)
{
m_pdata->m_pdbr=pdb;
}
void watchdb()
{
mydbreactor *pdbr;
if(gpmyappdocglobals->gpreactor()==null)
{
pdbr=new mydbreactor();
gpmyappdocglobals->setdbreactor(pdbr);
acdbhostapplicationservices()->workingdatabase()
->addreactor(pdbr);
acutprintf("added database reactor to "
"acdbhostapplicationservices()->workingdatabase()\n");
}
}
void clearreactors()
{
mydbreactor *pdbr;
if((pdbr=gpmyappdocglobals->gpreactor())!=null)
{
acdbhostapplicationservices()->workingdatabase()
->removereactor(pdbr);
delete pdbr;
gpmyappdocglobals->setdbreactor(null);
}
}
acrx::appretcode
acrxentrypoint(acrx::appmsgcode msg,void *appid)
{
switch(msg)
{
case acrx::kinitappmsg:
acrxunlockapplication(appid);
acrxregisterappmdiaware(appid);
gpmyappdocglobals=new myappdocglobals(curdoc());
gpmyappdocglobals->setglobals(curdoc());
acedregcmds->addcommand("exam11",
"watch",
"watch",
acrx_cmd_modal,
watchdb);
acedregcmds->addcommand("exam11",
"clear",
"clear",
acrx_cmd_modal,
clearreactors);
break;
case acrx::kunloadappmsg:
if(gpmyappdocglobals!=null)
{
gpmyappdocglobals->unload();
delete gpmyappdocglobals;
gpmyappdocglobals=null;
}
acedregcmds->removegroup("exam11");
break;
}
return acrx::kretok;
}
提示:
e:\hulei\test\exam11\exam11.cpp(326) : error c2664: '__thiscall myappdocglobals::myappdocglobals(const class myappdocglobals &)' : cannot convert parameter 1 from 'class acapdocument *' to 'const class myappdocglobals &'
reason: cannot convert from 'class acapdocument *' to 'const class myappdocglobals'
no constructor could take the source type, or constructor overload resolution was ambiguous
可能是
gpmyappdocglobals=new myappdocglobals(curdoc());
参数类型不正确,不知道怎么该?


myappdocglobals *gpmyappdocglobals;
这是一个全局变量。
myappdocglobals是我定义的一个类,
curdoc()是一个函数,返回acapdocument类型。
myappdocglobals是我定义的一个类,
curdoc()是一个函数,返回acapdocument * 类型。
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 01:04 PM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多