Skip to content
On this page

quickjs:在C语言中嵌入JS


标签:clang/package  

可以使用 QuickJS 提供的 C API 在 C 语言代码中调用 JavaScript 函数。下面是一个简单的例子,演示了如何使用 QuickJS C API 在 C 语言代码中调用 JavaScript 函数:

首先,您需要在 C 代码中包含 QuickJS 的头文件:

c
#include "quickjs.h"

然后,您需要创建一个 QuickJS 运行时环境和一个 JS 上下文:

c
JSRuntime *rt = JS_NewRuntime();
JSContext *ctx = JS_NewContext(rt);

接下来,您需要加载 JavaScript 代码到 JS 上下文中:

c
const char *js_code = "function add(a, b) { return a + b; }"; JS_Eval(ctx, js_code, strlen(js_code), "<eval>",
    JS_EVAL_TYPE_GLOBAL);

现在,您可以使用 QuickJS C API 来调用 JavaScript 函数了。下面是一个简单的例子,演示了如何调用名为 "add" 的 JavaScript 函数:

c
JSValue global_obj = JS_GetGlobalObject(ctx);
JSValue add_func = JS_GetPropertyStr(ctx, global_obj, "add");
JSValue argv[2];
argv[0] = JS_NewInt32(ctx, 2);
argv[1] = JS_NewInt32(ctx, 3);
JSValue ret_val = JS_Call(ctx, add_func, global_obj, 2, argv);
int32_t result;
JS_ToInt32(ctx, &result, ret_val);
printf("Result: %d\n", result);
JS_FreeValue(ctx, ret_val);
JS_FreeValue(ctx, add_func);
JS_FreeValue(ctx, global_obj);

在这个例子中,我们首先通过 JS_GetGlobalObject 函数获取全局对象。然后,我们使用 JS_GetPropertyStr 函数从全局对象中获取名为 "add" 的 JavaScript 函数。接下来,我们创建一个包含两个整数参数的 argv 数组,并使用 JS_Call 函数调用 "add" 函数。最后,我们从返回的值中提取整数结果,并使用 JS_FreeValue 函数释放所有使用的 JS 值。

最后,您需要在完成使用 QuickJS 的 C 代码后,释放 QuickJS 运行时环境和 JS 上下文:

c
JS_FreeContext(ctx);
JS_FreeRuntime(rt);

Last updated: