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

How to pass a const void * to node.js?

本文关键字:node js const void      更新时间:2023-10-16

我正在扩展节点libspotify的libspotif包装器,以支持专辑封面图像。到目前为止,我有以下正在工作的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?

谢谢你的建议。

您应该将其包装在v8::Value中,因为v8::HandleScope::Close需要一个对一的句柄作为参数。

我想v8::String应该这样做-v8::字符串类引用

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

v8::Array可能也很有用——这完全取决于之后如何使用返回的值。

我希望这能有所帮助。