Hello World和V8

时间:2013-08-21 10:34:52

标签: c++ node.js v8

我正在开发Windows。我正尝试使用hello world中的V8在V8中运行underscorediscovery。这无法在第

行编译
// Get the default Isolate created at startup.
  Isolate* isolate = Isolate::GetCurrent();

我查看了underscorediscovery标题,当这个类不在标题中时,它确实有旧的lib和标题。那很好。我删除了这一行并用

替换了前四行
  // 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也得到了构建。我按照关于addon development 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);
  .....

因此,谷歌的Hello世界的这部分应该有效:

// 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);

有什么问题?

2 个答案:

答案 0 :(得分:4)

Stable Node v0.10.15使用Google V8版本3.14.5(2012-10-22) C:\文件\ github上\节点\ DEPS \ V8 \包括\ v8.h

class V8EXPORT HandleScope {
 private:
  HandleScope(const HandleScope&);

Unstable Node v0.11.5使用Google V8版本3.20.14(2013-08-07) C:\文件\ github上\节点\ DEPS \ V8 \包括\ v8.h

class V8_EXPORT HandleScope {
 public:
  // TODO(svenpanne) Deprecate me when Chrome is fixed!
  HandleScope();
  HandleScope(Isolate* isolate);
  ~HandleScope();

从节点\ deps \ v8 \ ChangeLog文件:

  

2013-03-15:版本3.17.11

     

使用v8 :: Isolate添加了v8 :: HandleScope构造函数的一个版本   参数并使AdjustAmountOfExternalAllocatedMemory成为一个实例          方法v8 :: Isolate。          (问题2487)

答案 1 :(得分:0)

指针与参考文献。似乎HandleScope()需要引用,而New()返回一个指针。