如何将const void *传递给node.js?

时间:2013-09-01 18:54:05

标签: javascript c++ node.js

我正在扩展libspotifynode-libspotify包装,以支持专辑封面图片。 到目前为止,我有以下工作c绑定代码:

static Handle<Value> Album_Cover(const Arguments& args) {
    HandleScope scope;

    // test arguments sanity
    assert(args.Length() == 2);
    assert(args[0]->IsObject());  // sp_session
    assert(args[1]->IsObject());  // sp_album

    ObjectHandle<sp_session> *session = ObjectHandle<sp_session>::Unwrap(args[0]);
    ObjectHandle<sp_album> *album = ObjectHandle<sp_album>::Unwrap(args[1]);

    const byte *image_id = sp_album_cover(album->pointer, SP_IMAGE_SIZE_LARGE);
    size_t image_size;
    const void *image_data;

    if(image_id) {
        sp_image *image = sp_image_create(session->pointer, image_id);
        image_data = sp_image_data(image, &image_size);

        sp_image_release(image);
    }

    return scope.Close(image_data);
}

我在最后一行挣扎:如何在运行scope.Close(...)时将原始图像数据传递给node.js?

感谢任何建议。

1 个答案:

答案 0 :(得分:1)

你应该将它包装在v8::Value中,因为v8::HandleScope::Close期望一个句柄作为参数。

我猜v8::String应该这样做 - v8::String Class Reference

scope.Close(String::New((const char*)image_data, image_size));

v8::Array也可能有用 - 这一切都取决于你以后如何使用返回值。

我希望这会有所帮助。

相关问题