如何从Spidermonkey 38中的C / C ++函数返回JSObject

时间:2016-02-16 14:10:03

标签: spidermonkey

我想在C / C ++函数中创建一个JSObject并返回它以便在被调用者中使用。我正在努力使用官方文档,因为必要的信息有点分散,指南中充满了过时的信息,并没有涵盖很少的真实场景。

忽略似乎引用过时版本的部分,cookbook显示了调用args.rval().setInt32()setDouble()setNull()的示例。但是,reference for JS::CallArgsrval()会返回MutableHandleValue doesn't appear to have those setter methods。他们的意思是rval()->set...,它可以通过其->和/或投射操作符吗?

然后code example on the CallArgs page使用CallArgs'set()方法另外显示。这与上述方法有什么区别? set()setObject()都会确保我的新对象在GC中正确注册吗?

1 个答案:

答案 0 :(得分:0)

对于SpiderMonkey,不要过多地信任MDN,它通常是过时的或不完整的。 MutableHandle<Value>专精化实施MutableValueOperations,其中包括setObject()

例如,您可能想要做的事情:

static boolean
Test(JSContext* cx, unsigned argc, Value* vp) {
  CallArgs args = CallArgsFromVp(argc, vp);
  RootedObject obj(cx, JS_NewPlainObject(cx);
  if (!obj)
    return false;
  args.rval().setObject(*obj);
  return true;
}
对于所有不同的MutableHandle专精,

set是不同的。即对于MutableHandle<JSString>,您可以使用它来设置JSString*