【发布时间】:2017-10-04 07:38:14
【问题描述】:
我已经使用“--shared”配置选项编译了nodejs。在我的 C++ 代码中,我在节点中启动了一个脚本(在它自己的线程中):
node::Start(argc, argv);
我已执行以下 javascript 将对象放入全局空间:
global.someObject = new SomeObject;
我现在在 C++ 中(在另一个线程上),我想访问全局“someObject”。我一直在考虑使用这些代码,但是隔离变量是 NULL :
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::HandleScope scope(isolate);
auto context = isolate->GetCurrentContext(); // no longer crashes
auto global_obj = context->Global();
v8::Local<v8::Value> objinfo = global_obj->GetHiddenValue(v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), "someObject"));
有什么建议或想法吗? 如何从 C++ 中的节点获取有效的隔离变量?
【问题讨论】:
-
“在另一个线程上” - 这不起作用,当控制流通过您的代码时,您可以从 javascript 事件循环线程访问它们。如果您正在寻找一种方法来提供一些异步行为,那么您需要集成到 libuv 事件循环中。
-
很高兴通过创建一个 C++ 函数来做到这一点......但是有一个简单的例子来说明如何做到这一点吗?即注册一个 C++ 回调函数以将全局拉出 nodejs 系统。获取 nodejs 以执行该功能。我想nodejs将对象作为变量传递给c ++函数同样好!
-
我一直在使用 SWIG 生成插件 - 但是很难弄清楚 SWIG 包装器中发生了什么,也许我应该创建一个自定义 C++ 插件。
标签: javascript c++ node.js v8