duktape关闭注册

时间:2016-11-30 11:57:56

标签: c++ lua-api duktape

我有C ++项目,我正在使用duktape JS库。我需要在JS中注册全局函数并使用此函数将对象的指针保存为闭包数据,因此我可以在调用函数时访问此指针。

我知道如何在lua c api中执行此操作:

lua_pushlightuserdata(L, this);
lua_pushcclosure(L, &someFunction, 1);
lua_setglobal(L, "someFunction");

首先我将指针作为闭包数据,然后指向函数。我在duktape api中需要相同的功能。

你能告诉我一些关闭注册并访问它的代码吗?

2 个答案:

答案 0 :(得分:1)

与“C闭包”相关的值没有直接比喻,但您可以通过其他方式获得类似的结果。

一种简单的方法是将值存储为函数实例的属性:

void *ptr;

duk_push_current_function(ctx);
duk_get_prop_string(ctx, -1, "_ptr");
ptr = duk_get_pointer(ctx, -1);
duk_pop_2(ctx);  /* pop pointer and function */

/* ready to use 'ptr' */

然后,在调用函数时,将值检索为:

"\xFF" "ptr"

如果您想限制从Ecmascript代码访问相关值,您可以使用internal string,例如$.ajax({ type: 'GET', url: 'someUrl.php', data: {op : "demo"}, dataType: 'json', success: function(data){ $("#restaurantList > td").empty(); $.each(data, function(i,result){ var buttons = $('<button/>', { id: 1, text:"Get Rating", value: "GetRating", click: function(){alert(result.business);}}); var newRow = "<tr>" +"<td>" + result.business + "</td>" +"<td>" + result.address + "</td>" +"<td>" + result.rating + "</td>" +"<td>" + result.date + "</td>" +"</tr>" $("#restaurantList tbody").append(newRow) $("#restaurantList tbody").append(buttons) }); } });

答案 1 :(得分:0)

我有类似的问题。经过一些搜索,我发现a Wiki on howto persist objects对我有用,可以保存一个函数(回调)参考供以后使用。