4

使用duktape javascript 实现,您可以将本机 C 函数公开给 javascript 并像这样实现它们:

static duk_ret_t native_prime_check(duk_context *ctx) {
   int arg1 = duk_require_int(ctx, 0);
   int arg2 = duk_require_int(ctx, 1);
   // do something.
   return 0;
}

在公开本机函数时,我们需要指定参数的数量。

duk_push_c_function(ctx, native_prime_check, 2 /*nargs*/);

请举例说明如何制作一个接受可变数量参数的 C 函数并使用 duktape 将其公开给 Javascript。

4

1 回答 1

8

当你推送一个 C 函数时,你也可以DUK_VARARGS作为参数计数。当您这样做时,值堆栈将直接包含调用参数,并duk_get_top(ctx)为您提供给定的参数数量:

static duk_ret_t dump_args(duk_context *ctx) {
    duk_idx_t i, nargs;
    nargs = duk_get_top(ctx);
    for (i = 0; i < nargs; i++) {
        printf("type of argument %d: %d\n", (int) i, (int) duk_get_type(ctx, i));
    }
}

duk_push_c_function(ctx, dump_args, DUK_VARARGS);
于 2015-09-29T21:10:18.240 回答