in the constructor-6ren"> in the constructor-我已阅读教程“编写 Node.js native 扩展”:https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extens-6ren">
gpt4 book ai didi

c++ - Node.js 的原生 C++ 扩展 : "cloning" a Local< Value > in the constructor

转载 作者:行者123 更新时间:2023-11-28 08:17:22 27 4
gpt4 key购买 nike

我已阅读教程“编写 Node.js native 扩展”:https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extensions

代码运行良好(https://github.com/pquerna/node-extension-examples/blob/master/helloworld/helloworld.cc)

现在我要改变:

class HelloWorld: ObjectWrap
{
private:
int m_count;
public:
(...)
HelloWorld() :
m_count(0)
{
}
(...)
static Handle<Value> Hello(const Arguments& args)
{
HandleScope scope;
HelloWorld* hw = ObjectWrap::Unwrap<HelloWorld>(args.This());
hw->m_count++;
Local<String> result = String::New("Hello World");
return scope.Close(result);
}
(...)
}

类似的东西(在构造函数中复制一个参数并在 'Hello()' 中返回它):

class HelloWorld: ObjectWrap
{
private:
Local< Value > myval;/* <===================== */
public:
(...)
HelloWorld(const Local< Value >& v) :
myval(v) /* <===================== */
{
}
(...)
static Handle<Value> Hello(const Arguments& args)
{
HandleScope scope;
HelloWorld* hw = ObjectWrap::Unwrap<HelloWorld>(args.This());
return scope.Close(hw->myval);/* <===================== */
}
(...)
}

我的代码似乎不工作,hello() 似乎返回一个整数

var h=require("helloworld");
var H=new h.HelloWorld("test");
console.log(H.hello());

在构造函数中复制 myval 并在函数 'Hello()' 中返回 myval 的正确方法是什么?我应该在析构函数中管理一些东西吗?

谢谢。

皮埃尔

最佳答案

“本地”变量会被自动清除,所以你不能像那样只保存它们的拷贝。您需要使用“持久”句柄。

class HelloWorld: ObjectWrap
{
private:
Persistent< Value > myval;
public:
(...)
HelloWorld(const Local< Value >& v) :
myval(Persistent< Value >::New(v)) {

}
(...)
static Handle<Value> Hello(const Arguments& args)
{
HandleScope scope;
HelloWorld* hw = ObjectWrap::Unwrap<HelloWorld>(args.This());
return scope.Close(hw->myval);
}
(...)
}

关于c++ - Node.js 的原生 C++ 扩展 : "cloning" a Local< Value > in the constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288734/

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