0

コールバックパラメーターが文字列である限り、問題なく動作する次の機能があります。

void Server::AppUse(const FunctionCallbackInfo<Value>& args) {

    Isolate* isolate = Isolate::GetCurrent();

    HandleScope scope(isolate);

    Local<Function> nextCb = Local<Function>::Cast(args[0]);

    Local<Function> argv[2] = {
        String::NewFromUtf8(isolate, "hello world"),
        String::NewFromUtf8(isolate, "hello again"), 
    };

    nextCb->Call(isolate->GetCurrentContext()->Global(), 2, argv);

}

ノードでの実装:

var app = require('./build/Release/middleware');

app.use(function (next, again) {
       console.log(next);
       console.log(again);;
});

これにより、次の実装ノードが出力されます。

$ node ./example.js
hello world
hello again 

ただし、今はコールバックを追加したいと考えています。例えば:

void Server::AppUse(const FunctionCallbackInfo<Value>& args) {

    Isolate* isolate = Isolate::GetCurrent();

    HandleScope scope(isolate);

    Local<Function> nextCb = Local<Function>::Cast(args[0]);

    Local<Function> argv[1] = {
        nextCb 
    };

    nextCb->Call(isolate->GetCurrentContext()->Global(), 1, argv);

}

これにより、C++ コンパイル エラーが発生します。

./src/server.cc:73:63: error: no matching function for call to ‘v8::Function::Call(v8::Local<v8::Object>, int, v8::Local<v8::Function> [1])’
../src/server.cc:73:63: note: candidate is:
In file included from ~/.node-gyp/0.12.4/src/node.h:61:0,
                 from ../src/server.cc:1:
~/.node-gyp/0.12.4/deps/v8/include/v8.h:2557:16: note: v8::Local<v8::Value> v8::Function::Call(v8::Handle<v8::Value>, int, v8::Handle<v8::Value>*)

これは基本的に、V8::Call が値の配列のみを想定していることを意味します。しかし、関数を返したい場合はどうすればよいでしょうか? 現在のアドオンのドキュメントには例がありません。

4

1 に答える 1