首先,需要包含以下头文件:

#include <node.h>
#include <v8.h>

然后,可以使用以下代码创建一个包含{x: 1, y: 2, type: 3}的JavaScript对象:

v8::Local<v8::Object> obj = v8::Object::New(isolate);
obj->Set(context, v8::String::NewFromUtf8(isolate, 'x'), v8::Number::New(isolate, 1));
obj->Set(context, v8::String::NewFromUtf8(isolate, 'y'), v8::Number::New(isolate, 2));
obj->Set(context, v8::String::NewFromUtf8(isolate, 'type'), v8::Number::New(isolate, 3));

其中,isolate是一个Isolate对象,可以通过args.GetIsolate()获取;context是一个Local<Context>对象,可以通过args.GetIsolate()->GetCurrentContext()获取。

接下来,可以使用以下代码调用一个JavaScript函数:

v8::Local<v8::Function> func = ...; // 获取要调用的函数
v8::Local<v8::Value> result = func->Call(context, context->Global(), 1, &obj);

其中,func是一个Local<Function>对象,可以通过以下代码获取:

v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(args[0]);

这里假设函数是作为参数传递进来的。

完整的示例代码如下:

#include <node.h>
#include <v8.h>

void CallFunction(const v8::FunctionCallbackInfo<v8::Value>& args) {
  v8::Isolate* isolate = args.GetIsolate();
  v8::Local<v8::Context> context = isolate->GetCurrentContext();

  // 创建一个包含{x: 1, y: 2, type: 3}的JavaScript对象
  v8::Local<v8::Object> obj = v8::Object::New(isolate);
obj->Set(context, v8::String::NewFromUtf8(isolate, 'x'), v8::Number::New(isolate, 1));
obj->Set(context, v8::String::NewFromUtf8(isolate, 'y'), v8::Number::New(isolate, 2));
obj->Set(context, v8::String::NewFromUtf8(isolate, 'type'), v8::Number::New(isolate, 3));

  // 调用JavaScript函数
  v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(args[0]);
  v8::Local<v8::Value> result = func->Call(context, context->Global(), 1, &obj);

  // 将结果返回给JavaScript
  args.GetReturnValue().Set(result);
}

void Init(v8::Local<v8::Object> exports, v8::Local<v8::Value> module, void* priv) {
  NODE_SET_METHOD(exports, "callFunction", CallFunction);
}

NODE_MODULE(addon, Init)

这个模块暴露了一个名为callFunction的函数,可以接受一个JavaScript函数作为参数,并调用它。在JavaScript中,可以这样使用:

const addon = require('./addon');

function myFunction(obj) {
  console.log(obj.x, obj.y, obj.type);
}

addon.callFunction(myFunction);
Node.js C++ 使用 Local<Value> 构建 JS 对象并调用函数

原文地址: https://www.cveoy.top/t/topic/os8y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录