在SpiderMonkey中是否存在与PyCapsule相同/相似的东西?

时间:2012-05-27 10:09:55

标签: javascript c spidermonkey

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

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

1 个答案:

答案 0 :(得分:1)

没有类似的东西,所以确实需要创建一个自定义类。这是我最终使用的代码;它定义了一个新类“Resource”来存储指针。虽然不如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);