Node.js C++ Addon: 处理 JavaScript 对象 - Local 使用示例

本教程将展示如何使用 Node.js C++ Addon 接收 JavaScript 对象,并使用 Local<Value> 获取对象属性值。我们将使用一个示例代码,展示如何从 JavaScript 传入一个包含 'x', 'y', 'type' 属性的对象,并在 C++ 代码中读取并打印这些属性值。

C++ Addon 代码

#include <node.h>

using namespace v8;

void MyFunction(const FunctionCallbackInfo<Value>& args) {
  Isolate* isolate = args.GetIsolate();

  // 获取传入的参数
  Local<Object> obj = args[0]->ToObject(isolate);

  // 获取对象的属性,并打印出来
  Local<Value> x_val = obj->Get(String::NewFromUtf8(isolate, 'x'));
  double x = x_val->NumberValue();
  printf('x = %f\n', x);

  Local<Value> y_val = obj->Get(String::NewFromUtf8(isolate, 'y'));
  double y = y_val->NumberValue();
  printf('y = %f\n', y);

  Local<Value> type_val = obj->Get(String::NewFromUtf8(isolate, 'type'));
  int type = type_val->Int32Value();
  printf('type = %d\n', type);
}

void init(Local<Object> exports) {
  NODE_SET_METHOD(exports, 'myFunction', MyFunction);
}

NODE_MODULE(addon, init)

JavaScript 调用代码

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

const obj = {
  x: 1,
  y: 2,
  type: 3,
};

addon.myFunction(obj);

运行结果

x = 1.000000
y = 2.000000
type = 3

代码解释

  1. C++ 代码:

    • MyFunction 函数接收一个 Local<Value> 数组作为参数,该数组包含从 JavaScript 传入的参数。
    • 使用 args[0]->ToObject(isolate) 获取传入的 JavaScript 对象。
    • 使用 obj->Get(String::NewFromUtf8(isolate, 'x')) 获取对象属性 'x' 的值。
    • 使用 x_val->NumberValue() 将属性值转换为 double 类型。
    • 同理获取 'y' 和 'type' 属性的值。
  2. JavaScript 代码:

    • 使用 require('./build/Release/addon') 加载编译好的 C++ Addon。
    • 创建一个包含 'x', 'y', 'type' 属性的 JavaScript 对象。
    • 使用 addon.myFunction(obj) 调用 C++ 中的 MyFunction 函数。

总结

本教程展示了如何使用 Node.js C++ Addon 接收 JavaScript 对象,并使用 Local<Value> 获取对象属性值。这是一种将 JavaScript 代码与 C++ 代码交互的常用方法,可以帮助你扩展 Node.js 的功能并提高性能。

Node.js C++ Addon: 处理 JavaScript 对象 - Local<Value> 使用示例

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

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