【问题标题】:Is there something equivalent/similar to PyCapsule in SpiderMonkey?SpiderMonkey 中是否有与 PyCapsule 等效/相似的东西?
【发布时间】:2012-05-27 10:09:55
【问题描述】:

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

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

【问题讨论】:

    标签: javascript c spidermonkey


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-01
      • 2022-12-22
      • 2010-09-09
      • 2022-01-10
      • 2018-05-26
      • 2014-10-14
      • 2012-12-30
      • 2020-07-21
      相关资源
      最近更新 更多