将空参数传递给 v8 回调

Passing null argument to v8 callback

我有一个本机插件,它实现了一个函数,该函数接受回调并使用可能的错误和结果调用该回调。

我目前有来自 NodeJS 文档的以下代码,它直接使用结果调用该回调:

v8::Local<v8::Function> callback = v8::Local<v8::Function>::Cast(args[0]);
const unsigned callback_argc = 1;
v8::Local<v8::Value> callback_arguments[callback_argc] = { physical_drives };
callback->Call(v8::Context::GetCurrent()->Global(), callback_argc, callback_arguments);

在某些情况下,我想用 null 第一个参数调用回调:

v8::Local<v8::Value> callback_arguments[callback_argc] = {
    v8::Null()
    physical_drives 
};

这失败了,因为我无法使用 v8::Null()v8::Undefined() 初始化 callback_arguments,因为这些函数 return a v8::Primitivecallback_arguments 包含 v8::Values.

也无法进行手动转换:

v8::Local<v8::Value>::Cast(v8::Null());

null/undefined 值传递给回调的正确方法是什么?

v8::Primitivev8::Value 的子类,因此向上转型绝对没问题。代码无法编译,因为您无法将 v8::Handle 向下转换为 v8::Local.

只需更改 callback_arguments 的类型:

v8::Handle<v8::Value> callback_arguments[callback_argc] = {
    v8::Null(),
    physical_drives 
};

这应该编译得很好。