v8从C ++中的nodejs中提取全局对象

时间:2017-10-04 07:38:14

标签: javascript c++ node.js v8

我使用" - shared"编译了nodejs。配置选项。在我的C ++代码中,我已在节点(在其自己的线程中)中启动了一个脚本:

node::Start(argc, argv);

我已执行以下javascript将对象放入全局空间:

global.someObject = new SomeObject;

我现在使用C ++(在另一个线程上),我想访问全局" someObject"。我一直在考虑沿着这些行使用代码,但是isolate vairable是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 ++中的节点获得有效的隔离变量?

1 个答案:

答案 0 :(得分:1)

您需要从主线程运行isolate->Exit(),并从另一个线程调用isolate->Enter()。您还应该使用v8 :: Locker和v8 :: Unlocker API。有一些示例here