我正在扩展libspotify的node-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?
感谢任何建议。
答案 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
也可能有用 - 这一切都取决于你以后如何使用返回值。
我希望这会有所帮助。