0

当嵌入 Python 时,有一种PyCapsule类型可以创建一个包含 C 指针的对象,该指针不能从 Python 代码中修改,也就是说,它非常适合传递仅由 C 代码使用的东西。

由于我的应用程序还通过 SpiderMonkey 引擎支持 JavaScript,因此我正在 SpiderMonkey 中寻找类似的东西。我知道我可以JSClass使用JSCLASS_HAS_PRIVATE标志创建自定义,但我想知道是否还有另一种更简单/更轻量级的方法。

4

1 回答 1

1

没有类似的东西,所以确实有必要创建一个自定义类。这是我最终使用的代码;它定义了一个新的类“资源”来存储指针。虽然不如 python 方式漂亮,但它仍然非常简单:

// Define the class and give it some private space for the pointer
static JSClass resource_class = { "Resource", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub,
    JS_PropertyStub, JS_StrictPropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub,
    JS_FinalizeStub, JSCLASS_NO_OPTIONAL_MEMBERS };

// Create an object and store the pointer
JSObject *obj = JS_NewObject(cx, &resource_class, NULL, NULL);
JS_SetPrivate(cx, obj, MY_POINTER);

// Get the pointer
void *ptr = JS_GetPrivate(cx, obj);
于 2012-07-26T23:52:03.320 回答