注册c函数
#include "quickjs.h"
JSRuntime* rt = new JS_NewRuntime();
JSContext *ctx = new JS_NewContext(rt);
//1.实现c函数
static int sum(int a, int b)
{
return a+b;
}
//2.实现JS的C函数
static JSValue js_sum(JSContext* ctx, JSValueConst this_val, int argc, JSValueConst* argv)
{
int a, b, _sum;
if (JS_ToInt32(ctx, &a, argv[0]))
return JS_EXCEPTION;
if (JS_ToInt32(ctx, &b, argv[1]))
return JS_EXCEPTION;
_sum = sum(a, b);
return JS_NewInt32(ctx, _sum);
}
//3.获取全局JS对象
JSValue globalObj = JS_GetGlobalObject(ctx);
//4. 为JS对象注册名称为sum的属性,属性值为函数
JS_SetPropertyStr(ctx, globalObj, "sum", JS_NewCFunction(ctx, js_sum, "sum", 2));
//5.JS_GetGlobalObject获取的是全局对象的复制,所以需要释放
JS_FreeValue(ctx, globalObj);
网友评论