C++ を使用して node.js のアドオンを作成しています。
ここにいくつかのスニペットがあります:
class Client : public node::ObjectWrap, public someObjectObserver {
public:
void onAsyncMethodEnds() {
Local<Value> argv[] = { Local<Value>::New(String::New("TheString")) };
this->callback->Call(Context::GetCurrent()->Global(), 1, argv);
}
....
private:
static v8::Handle<v8::Value> BeInitiator(const v8::Arguments& args) {
HandleScope scope;
Client* client = ObjectWrap::Unwrap<Client>(args.This());
client->someObject->asyncMethod(client, NULL);
return scope.Close(Boolean::New(true));
}
static v8::Handle<v8::Value> SetCallback(const v8::Arguments& args) {
HandleScope scope;
Client* client = ObjectWrap::Unwrap<Client>(args.This());
client->callback = Persistent<Function>::New(Handle<Function>::Cast(args[0]));
return scope.Close(Boolean::New(true));
}
後で呼び出すには、javascript 関数をコールバックとして保存する必要があります。Client クラスは別のオブジェクトのオブザーバーであり、javascript コールバックは onAsyncMethodEnds から呼び出す必要があります。残念ながら、関数「BeInitiator」を呼び出すと、コールバック Call() の直前に「Bus error: 10」エラーが発生します。
アドバイスありがとう