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

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

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

Re:

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

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

在ADS中,自己的函數調用是通過一個表,其中的細項為{"c:mycmd", mycmd_main}...

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

leeyeafu 发表于 2003-2-18 11:19:00

能否将mycmd_main()函数声明为void?

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

[建议]

本帖最后由 作者 于 2003-2-18 13:26:15 编辑

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

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

不行,在{"c:mycmd",mycmd_main}裡,第二個是函數指針,它的返回類型只能是int

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

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

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

CAD菜鸟 发表于 2003-2-18 16:06:00

贴上你的程序,让大伙看看?我怎么未遇上这种事?

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)) < 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;       
}

CAD菜鸟 发表于 2003-2-21 14:12:00

将回显变量cmdecho设为0试试。

页: [1] 2
查看完整版本: [求助]在ADS內,當一個指令執行完後,會有一個nil的返回值,如何去除?