我在窗户上工作。我正在尝试使用来自underscorediscovery的 V8 在 V8中运行hello world。这无法在线编译
// Get the default Isolate created at startup.
Isolate* isolate = Isolate::GetCurrent();
我查看了下划线发现标头,当此类不在标头中时,它确实有旧的库和标头。那很好。我删除了这一行并将前四行替换为
// Create a stack-allocated handle scope.
HandleScope handle_scope;
// Create a new context.
Handle<Context> context = Context::New();
// Here's how you could create a Persistent handle to the context, if needed.
Persistent<Context> persistent_context(context);
它奏效了。所以这个 Isolate 被添加到 V8 中。
然后我安装了 node.js,它的依赖项 deps 文件夹中也有 v8。我构建了 node.js 并且 v8 也得到了构建。我遵循了关于nodejs插件开发的说明。它的“hello world nodejs”是成功的。我认为实际的谷歌代码也应该像 Isolate 类在标题中一样工作。但它没有编译错误:
error C2664: 'v8::HandleScope::HandleScope(const v8::HandleSc
ope &)' : cannot convert parameter 1 from 'v8::Isolate *' to 'const v8::HandleS
cope &' [C:\Users\asnegi\company\nodejs project\node-v0.10.15\src\my_files\buil
d\v8code.vcxproj]
Reason: cannot convert from 'v8::Isolate *' to 'const v8::HandleScope
'
No constructor could take the source type, or constructor overload re
solution was ambiguous
查看 C:\Users\abc.node-gyp\0.10.15\deps\v8\include\v8.h 的标题
它定义了类 Isolate。还,
template <class T> class Handle {
public:
/**
* Creates an empty handle.
*/
inline Handle() : val_(0) {}
/**
* Creates a new handle for the specified value.
*/
inline explicit Handle(T* val) : val_(val) {}
...........
...........
和
class HandleScope {
public:
inline HandleScope();
explicit inline HandleScope(Isolate* isolate);
.....
因此,Google 的 Hello world 的这一部分应该可以工作:
// Get the default Isolate created at startup.
Isolate* isolate = Isolate::GetCurrent();
// Create a stack-allocated handle scope.
HandleScope handle_scope(isolate);
// Create a new context.
Handle<Context> context = Context::New(isolate);
问题是什么 ?