Articles of embedded v8

使指向已删除的C ++对象的句柄无效

当暴露给v8的C ++对象被删除时,我怎样才能使可能指向这个对象的句柄失效。 我正在使用v8作为一个更大的应用程序的脚本接口。 更大的应用程序中的对象在v8中使用节点的ObjectWrap类进行封装和访问。 问题是,包装对象的生命周期是有限的。 如果在JavaScript中,我执行如下所示: var win = app.getWindow(); win.close(); // The C++ object that win references goes away console.log(win.width()); // This should fail. 我希望它的行为就像评论说的那样。 在win.close()之后(或者其他一些事件也许在JS控制之外),任何对win或者duplicate处理的访问都需要失败。 目前,我必须将封装的C ++对象标记为无效,并检查每个方法调用的有效性。 这是做到这一点的唯一方法,还是有办法标记一个不再有效的句柄?

如何从C ++调用JavaScriptcallback

我试图从我的函数的另一个angular度调用V8中的callback。 所以这段代码注册callback: if (args.Length()) { String::Utf8Value event(args[0]->ToString()); if (event.length()) { Isolate* isolate = V8Interface::getCurrent()->getIsolate(); Locker locker(isolate); HandleScope scope(isolate); callback cb = callback(isolate, Local<Function>::Cast(args[1])); if(!events.count(*event)) { events[*event] = callbacks({ cb }); } else { events.find(*event)->second.push_back(cb); } } } 这个叫它: void trigger(std::string event) { Isolate* isolate = V8Interface::getCurrent()->getIsolate(); Locker locker(isolate); HandleScope scope(isolate); if(events.count(event)) { for(callback cb : […]

如何存储对函数的引用,以便稍后在node.js C ++插件模块中调用它?

这里是我用C ++编写的node.js插件模块,使用node-gyp构build。 当StoreFunction我试图存储一个指向函数的指针,所以我可以稍后使用它 当我尝试稍后通过InvokeFunction调用它时,出现Segmentation错误。 如果我在两个函数(使用cout)中检查指针,我感到困惑,它们是相同的值。 所以我猜测调用两个函数之间调用上下文更改的变化,或者我不明白我指的是什么。 所有(ummmmmm)指针感激地收到我的问题在这里………….. #include <node.h> #include <v8.h> using namespace v8; v8::Persistent<v8::Function> callbackFunction; Handle<Value> StoreFunction(const Arguments& args) { HandleScope scope; callbackFunction = *Local<Function>::Cast(args[0]); return scope.Close(Undefined()); } Handle<Value> InvokeFunction(const Arguments& args) { HandleScope scope; Local<Value> argv[1] = { String::New("Callback from InvokeFunction")}; callbackFunction->Call(Context::GetCurrent()->Global(), 1, argv); return scope.Close(Undefined()); } void init(Handle<Object> target) { NODE_SET_METHOD(target, "StoreFunction", […]

node.js插件上未定义的符号

我正在尝试创build一些node.js插件。 在插件里面我有一个静态库的调用。 一切编译好,但是当我从JavaScript调用我的插件function,我得到以下内容: module.js:356 Module._extensions[extension](this, filename); ^ Error: /home/…/Projects/NodeAddonComLibTest/build/Debug/addon.node: undefined symbol: _Z6ctest1Pi at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) at require (module.js:380:17) at Object.<anonymous> (/home/…/Projects/NodeAddonComLibTest/doTest.js:1:75) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) 我的插件代码如下: #include <iostream> #include <string.h> #include <stdlib.h> #include <node.h> #include <v8.h> using namespace […]

JavaScript标准库V8

在我的应用程序中,我允许用户使用JavaScript编写插件。 为此我embedded了V8。 问题是开发人员不能使用像HTTP,套接字,stream,定时器,线程,Crypotography,unit testing等等。 我search堆栈溢出,我发现node.js。 它的问题是,你可以真正创build HTTP服务器,并启动进程和更多的东西,我不想让。 另外,node.js有自己的环境( ./node script.js ),你不能embedded它。 而且它不支持Windows – 我需要它是完全跨平台的。 如果这些问题可以解决,那就太棒了:)但是我也对其他框架开放。 有任何想法吗? 谢谢!