atan003 发表于 2003-2-17 23:32:00

[求助]在ADS內,當一個指令執行完後,會有一個nil的返回值,如何去除?

leeyeafu 发表于 2003-2-18 09:34:00

可能我没能理解你的意图。
ADS函数的返回值用于检查函数执行过程是否正确,你若认为不需要用它,完全可以不去理会它。不知道为什么要去除它?
void MyADSCommand(...)//函数参数表略
{
ads_command(...);
}
这样好象ads_command()函数返回的int值就不会起作用了。
更好例子你可以用ObjARXWiz向导生成一段ARX示例代码,其中的AddCommand()函数就是引用了acedRegCmds->addCommand()函数,并忽略返回值。

atan003 发表于 2003-2-18 11:14:00

當在指令行輸入mycmd後,會調用mycmd_main,當然要先聲明int mycmd_main(struct resbuf *rb);在mycmd_main內,如果沒有用ads_rtnil或其他的返回函數,程序執行到最後,會在指令行自動返回nil,結果為"Command:mycmdnil",
不知能否明白!

CAD菜鸟 发表于 2003-2-18 13:26:00


用以下语句:
int mycmd_main(struct resbuf *rb)
{
...
return RTNORM;
}

atan003 发表于 2003-2-18 14:22:00

不行的,本來對於int mycmd_main(...)函數,最後的返回值就是你所寫的,但就是在指令行會顯示nil

atan003 发表于 2003-2-19 16:35:00

//以下以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]
查看完整版本: [求助]在ADS內,當一個指令執行完後,會有一個nil的返回值,如何去除?