1

我正在扩展node-libspotify的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);
}

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

感谢您的任何建议。

4

1 回答 1

1

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

我想v8::String应该这样做 - v8::String 类参考

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

Av8::Array也可能有用 - 这完全取决于您之后将如何使用返回的值。

我希望这有帮助。

于 2013-09-02T13:18:15.363 回答