注冊c函數(shù)
#include "quickjs.h"
JSRuntime* rt = new JS_NewRuntime();
JSContext *ctx = new JS_NewContext(rt);
//1.實現(xiàn)c函數(shù)
static int sum(int a, int b)
{
return a+b;
}
//2.實現(xiàn)JS的C函數(shù)
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的屬性,屬性值為函數(shù)
JS_SetPropertyStr(ctx, globalObj, "sum", JS_NewCFunction(ctx, js_sum, "sum", 2));
//5.JS_GetGlobalObject獲取的是全局對象的復制,所以需要釋放
JS_FreeValue(ctx, globalObj);