[求助]在ADS內,當一個指令執行完後,會有一個nil的返回值,如何去除?
Re:
可能我没能理解你的意图。ADS函数的返回值用于检查函数执行过程是否正确,你若认为不需要用它,完全可以不去理会它。不知道为什么要去除它?
void MyADSCommand(...)//函数参数表略
{
ads_command(...);
}
这样好象ads_command()函数返回的int值就不会起作用了。
更好例子你可以用ObjARXWiz向导生成一段ARX示例代码,其中的AddCommand()函数就是引用了acedRegCmds->addCommand()函数,并忽略返回值。
在ADS中,自己的函數調用是通過一個表,其中的細項為{"c:mycmd", mycmd_main}...
當在指令行輸入mycmd後,會調用mycmd_main,當然要先聲明int mycmd_main(struct resbuf *rb);在mycmd_main內,如果沒有用ads_rtnil或其他的返回函數,程序執行到最後,會在指令行自動返回nil,結果為"Command:mycmdnil",不知能否明白!
能否将mycmd_main()函数声明为void?
[建议]
本帖最后由 作者 于 2003-2-18 13:26:15 编辑用以下语句:
int mycmd_main(struct resbuf *rb)
{
...
return RTNORM;
}
不行,在{"c:mycmd",mycmd_main}裡,第二個是函數指針,它的返回類型只能是int
不行的,本來對於int mycmd_main(...)函數,最後的返回值就是你所寫的,但就是在指
不行的,本來對於int mycmd_main(...)函數,最後的返回值就是你所寫的,但就是在指令行會顯示nil贴上你的程序,让大伙看看?我怎么未遇上这种事?
請各位看看原程序......
//以下以SDS或sds開頭的函數、變量、常量是和ads相應的,如sds_resbuf=resbuf,sds_link=ads_link,執行後,在指令行會有“mycmdnil"//-----------------------------------------------------------------------------
#define ARRAYELEMENTS(array) (sizeof(array)/sizeof((array)))
struct func_def
{
char *func_name;
int (*func) (struct sds_resbuf *);
};
int mycmd_main(resbuf *rb);
static struct func_def func_table[] =
{
{"c:mycmd", mycmd_main}
};
int main(int, char **);
int invokefun(void);
int funcload(void);
int main(int argc, char** argv)
{
short scode = RSRSLT; // Normal result code (default)
int stat;
char errmsg;
ads_init(argc, argv); // Open communication with lisp
for ( ;; )
{ // Request/Result loop
if ((stat = sds_link(scode)) < 0)
{
sprintf(errmsg, "Templt: bad status from sds_link() = %d\n", stat);
sds_printf(errmsg);
sds_exit(-1);
}
scode = RSRSLT; // Reset result code
switch (stat)
{
case RQXLOAD: // Load & define functions
scode = funcload() == RTNORM ? RSRSLT : RSERR;
break;
case SDS_RQXUNLD:
break;
case RQSUBR: // Handle external function requests
scode = invokefun() == RTNORM ? RSRSLT : RSERR;
break;
case SDS_RQSAVE:
break;
case SDS_RQEND:
break;
case SDS_RQQUIT:
break;
case SDS_RQCFG:
break;
case SDS_RQHUP:
break;
case SDS_RQXHELP:
break;
default:
break;
}
}
return(1);
}
static int funcload()
{
short i;
for (i = 0; i < ARRAYELEMENTS(func_table); i++)
{
if (!ads_defun(func_table.func_name, i))
return RTERROR;
}
return RTNORM;
}
static int invokefun()
{
struct sds_resbuf *rb;
int val;
if ((val = sds_getfuncode()) < 0 || val >= ARRAYELEMENTS(func_table))
{
sds_fail("收到不存在的函數代碼.");
return RTERROR;
}
rb = sds_getargs();
val = (*func_table.func)(rb);
sds_relrb(rb);
return val;
}
//////////////////////////功能函數//////////////////////////////////
int mycmd_main(resbuf *rb)
{
ads_alert("in");
return RTNORM;
}
将回显变量cmdecho设为0试试。
页:
[1]
2