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

v8 extracting a global object from nodejs in C++

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

node::Start(argc, argv);

我执行了以下 javascript 将对象放入全局 space :

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++ 中如何从节点获取有效的隔离变量?

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