三木社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 240|回复: 0
打印 上一主题 下一主题

nodejs-回调Callbacks

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-8-8 08:00:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
你也能传 JavaScript 函数给 C++ 函数,并执行它。 在 addon.cc 中:
  1. // addon.cc
  2. #include <node.h>

  3. using namespace v8;

  4. void RunCallback(const FunctionCallbackInfo<Value>& args) {
  5.   Isolate* isolate = Isolate::GetCurrent();
  6.   HandleScope scope(isolate);

  7.   Local<Function> cb = Local<Function>::Cast(args[0]);
  8.   const unsigned argc = 1;
  9.   Local<Value> argv[argc] = { String::NewFromUtf8(isolate, "hello world") };
  10.   cb->Call(isolate->GetCurrentContext()->Global(), argc, argv);
  11. }

  12. void Init(Handle<Object> exports, Handle<Object> module) {
  13.   NODE_SET_METHOD(module, "exports", RunCallback);
  14. }

  15. NODE_MODULE(addon, Init)
复制代码
注意,这个例子中使用了 Init() 里的 2 个参数,module对象是第二个参数。它允许 addon 使用一个函数完全重写 exports。
可以用以下的代码来测试:

  1. // test.js
  2. var addon = require('./build/Release/addon');

  3. addon(function(msg){
  4.   console.log(msg); // 'hello world'
  5. });
复制代码


回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2025-6-27 00:35 , Processed in 0.025925 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表