2

我在窗户上工作。我正在尝试使用来自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);

问题是什么 ?

4

2 回答 2

4

稳定节点 v0.10.15 使用谷歌 V8 版本3.14.5(2012-10-22) C:\Documents\github\node\deps\v8\include\v8.h

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

Unstable Node v0.11.5 使用谷歌V8版本3.20.14(2013-08-07) C:\Documents\github\node\deps\v8\include\v8.h

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

从 node\deps\v8\ChangeLog 文件中:

2013-03-15:版本 3.17.11

添加了带有 v8::Isolate 参数的 v8::HandleScope 构造函数版本,并使 AdjustAmountOfExternalAllocatedMemory 成为 v8::Isolate 的实例方法。(第 2487 期)

于 2013-08-21T12:31:01.103 回答
0

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

于 2013-08-21T10:45:27.103 回答