阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Node.js C++插件 函数工厂

      Node.js C++插件 函数工厂

      另一种常见情况是创建 JavaScript 函数来包装 C++ 函数,并返回到 JavaScript:

      // addon.cc
      #include <node.h>
      
      namespace demo {
      
      using v8::Function;
      using v8::FunctionCallbackInfo;
      using v8::FunctionTemplate;
      using v8::Isolate;
      using v8::Local;
      using v8::Object;
      using v8::String;
      using v8::Value;
      
      void MyFunction(const FunctionCallbackInfo<Value>& args) {
        Isolate* isolate = args.GetIsolate();
        args.GetReturnValue().Set(String::NewFromUtf8(isolate, "hello world"));
      }
      
      void CreateFunction(const FunctionCallbackInfo<Value>& args) {
        Isolate* isolate = args.GetIsolate();
      
        Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, MyFunction);
        Local< Function> fn = tpl->GetFunction();
      
        // 可以省略这步使它匿名
        fn->SetName(String::NewFromUtf8(isolate, "theFunction"));
      
        args.GetReturnValue().Set(fn);
      }
      
      void Init(Local< Object> exports, Local< Object> module) {
        NODE_SET_METHOD(module, "exports", CreateFunction);
      }
      
      NODE_MODULE(NODE_GYP_MODULE_NAME, Init)
      
      }  // namespace demo
      

      测试它:

      // test.js
      const addon = require('./build/Release/addon');
      
      const fn = addon();
      console.log(fn());
      // 打印: 'hello world'
      

      更多内容请参考:Node.js C++插件,或者通过 点击对应菜单 进行查看;


      目录
      本文目录
      目录