gpt4 book ai didi

c++ - duktape 关闭注册

转载 作者:行者123 更新时间:2023-11-30 05:19:59 25 4
gpt4 key购买 nike

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

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

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

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

你能给我一些关闭注册和访问的代码吗?

最佳答案

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

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

duk_push_c_function(ctx, someFunction, 1 /*nargs*/);
duk_push_pointer(ctx, (void *) somePointer);
duk_put_prop_string(ctx, -2, "_ptr");
duk_put_global_string(ctx, "someFunction");

然后,当函数被调用时,检索值如下:

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' */

如果您想限制从 Ecmascript 代码访问关联值,您可以使用 internal string ,例如"\xFF""ptr".

关于c++ - duktape 关闭注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40887774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com