【OpenHarmony】napi基本用法----HelloWorld

创建Hello.cc文件

// hello.cc using Node-API
#include <node_api.h>

namespace demo {
    
    

napi_value Method(napi_env env, napi_callback_info args) {
    
    
  napi_value greeting;
  napi_status status;

  status = napi_create_string_utf8(env, "world", NAPI_AUTO_LENGTH, &greeting);
  if (status != napi_ok) return nullptr;
  return greeting;
}

napi_value init(napi_env env, napi_value exports) {
    
    
  napi_status status;
  napi_value fn;

  status = napi_create_function(env, nullptr, 0, Method, nullptr, &fn);
  if (status != napi_ok) return nullptr;

  status = napi_set_named_property(env, exports, "hello", fn);
  if (status != napi_ok) return nullptr;
  return exports;
}

NAPI_MODULE(NODE_GYP_MODULE_NAME, init)

}  // namespace demo
  • 每一个node.js的插件,都必须暴露如下模式的初始化函数:
void Initialize(Local<Object> exports);
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
  • 参数module_name除了后缀.node不一样之外,必须和最终的二进制文件名称相匹配。
  • 上述列子中,初始化函数是initmodule_name使用了NODE_GYP_MODULE_NAME宏,该宏在使用node-gyp进行编译时,会保证二进制文件名称被当作第一个参数传递给NODE_MODULE

创建binding.gyp

{
    
    
  "targets": [
    {
    
    
      "target_name": "addon",
      "sources": [ "hello.cc" ]
    }
  ]
}
  • 该文件是json格式的,被工具node-gyp所使用,用来编译我们的插件。

编译插件

  • 在我们的项目目录下执行 node-gyp configure build编译我们的插件。
  • 编译完成后在目录./build/Release下面会生成我们的插件的二进制文件addon.node

测试

  • 编写测试文件如下
// hello.js
const addon = require('./build/Release/addon');

console.log(addon.hello());
// Prints: 'world'
  • 执行测试文件node hello.js,会打印world

全部代码在这里

猜你喜欢

转载自blog.csdn.net/C2681595858/article/details/127164210
今日推荐