chenpool 发表于 2005-3-19 16:03:00

关于acedCommand的讨论

ARX的帮助里说:使用acedCommand有三个原则:


1、在注册为透明ARX(ACRX_CMD_TRANSPARENT)的应用程序中不使用


2、不使用acedCommand函数去执行其他任何通过acedRegCmds->addCommand()注册的命令。(可以用acedInvoke())


3、在允许用户交互操作的场合,不使用


我有一个疑问:我在A.ARX中调用另外一个B.ARX程序,同样都是透明命令,用acedCommand也可以实现调用啊。反倒用acedInvoke()调用会出毛病


如果想通过A.ARX中调用B.ARX程序,不知道大家是怎么实现的。


void A()       //A是注册的命令<BR>{<BR>        <BR>        if(acedArxLoad("B.arx")!=RTERROR)<BR>        {        <BR>                       acedCommand(RTSTR,"B",RTNONE);       //B是B.ARX中注册的命令


                if(acedArxUnload("B.arx")==RTERROR)<BR>                        acedAlert("卸载失败!\n请重新启动系统!或者联系管理员");<BR>        }<BR>        else<BR>                acedAlert("加载失败!\n请重新启动系统!或者联系管理员");


}

pandoram 发表于 2005-3-24 10:43:00

那个不能使用指的是避免在某些情况下使用, 以避免过多re-entrance(因为acedCommand, 透明命令, addCommand注册的命令等等都是靠堆栈, 使用时要避免堆栈冲突, 所以最多只允许re-entry四次), 不是一次都不能用.
页: [1]
查看完整版本: 关于acedCommand的讨论