[求助]在ADS內,當一個指令執行完後,會有一個nil的返回值,如何去除?
可能我没能理解你的意图。ADS函数的返回值用于检查函数执行过程是否正确,你若认为不需要用它,完全可以不去理会它。不知道为什么要去除它?
void MyADSCommand(...)//函数参数表略
{
ads_command(...);
}
这样好象ads_command()函数返回的int值就不会起作用了。
更好例子你可以用ObjARXWiz向导生成一段ARX示例代码,其中的AddCommand()函数就是引用了acedRegCmds->addCommand()函数,并忽略返回值。 當在指令行輸入mycmd後,會調用mycmd_main,當然要先聲明int mycmd_main(struct resbuf *rb);在mycmd_main內,如果沒有用ads_rtnil或其他的返回函數,程序執行到最後,會在指令行自動返回nil,結果為"Command:mycmdnil",
不知能否明白!
用以下语句:
int mycmd_main(struct resbuf *rb)
{
...
return RTNORM;
} 不行的,本來對於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)) = 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;
}
页:
[1]