v8 中JS与C++互调

**************************v8中JS调C++:注册回调函数*****************************

JS调C++数据:访问器(Accessor)   (直接访问)

(1)定义C++回调函数Getter/Setter

(2)Context全局对象模板(ObjectTemplate)注册Getter/Setter

JS调C++函数:(Context)全局对象模板ObjectTemplate注册回调函数(通过v8::Arguments传递参数)

Template::Set(Handle<String> name, Handle<Data> value,PropertyAttribute attributes = None);

JS调C++对象:(通过CPPObj.XXX访问)

1.C++对象映射成(v8_API)JS对象,加入JS运行时环境(Context):                                         C++类映射成ObjectTemplate对象

(1)创建JS对象模板ObjectTemplate:

Handle<ObjectTemplate> JSObjTempl = ObjectTemplate::New();

(2)设置对象模板内部域:

JSObjTempl->SetInternalFieldCount(1);

(3)创建JS对象:

Local<Object> JSObj=JSObjTempl->NewInstance();

(3)C++对象包装成(External)外部对象,放入JS对象内部域:

ClassA* p=new ClassA(3,7);

Local<External> Ext=External::New(p);

JSObj->SetInternalField(0,Ext);

(4)JS对象放入运行时环境(全局对象)

context->Global()->Set(String::New("ClassA"),JSObj);

2.调C++对象的成员数据:JS对象模板注册Getter/Setter回调函数

JSObjTempl->SetAccessor(String::New("x"),GetCPPObj_X,SetCPPObj_X);

JSObjTempl->SetAccessor(String::New("y"),GetCPPObj_Y,SetCPPObj_Y);

3.调C++对象的成员函数:JS对象模板注册回调函数,通过回调函数调用成员函数

JSObjTempl->Set(String::New("method_a"), FunctionTemplate::New(Callback_A));

JSObjTempl->Set(String::New("method_b"), FunctionTemplate::New(Callback_B));

回调函数:(1)(当前调用)JS对象:

Local<Object> self = AccessorInfo.Holder()/Arguments.Holder();

(2)(包装后)外部对象:

Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));

(3)C++对象

CPPObj* p = static_cast<CPPObj*>(wrap->Value())

**********************************C++调JS**************************************

C++调JS函数:运行时环境查找JS函数,并调用

v8学习笔记(八) 【JS与C++互调】相关推荐

  1. ReactJS学习笔记八:动画

    ReactJS学习笔记八:动画 分类: react学习笔记 javascript2015-07-06 20:27 321人阅读 评论(0) 收藏 举报 react动画 目录(?)[+] 这里只讨论Re ...

  2. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  3. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  4. ROS学习笔记八:创建ROS msg和srv

    ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...

  5. Halcon 学习笔记八:颜色识别

    Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...

  6. ZooKeeper学习笔记(八):ZooKeeper集群写数据原理

    写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...

  7. MongoDB 学习笔记八 复制、分片、备份与恢复、监控

    MongoDB 学习笔记八 复制.分片.备份与恢复.监控 MongoDB复制(副本集) 什么是复制? MongoDB 复制原理 MongoDB 副本集设置 副本集添加成员 MongoDB 分片 分片 ...

  8. 前端学习笔记(js基础知识)

    前端学习笔记(js基础知识) JavaScript 输出 JavaScript 数据类型 常见的HTML事件 DOM 冒泡与捕获 流程控制语句 for..in 计时器 let,var,const的区别 ...

  9. python3第三方库手册_python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑...

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

最新文章

  1. vim常用命令总结 (转)
  2. Java怎么把数组怎么放入set,如何将数组转换为Java中的Set
  3. Mind the Gap: Upgrading Genomes with Pacific Biosciences RS Long-Read Sequencing Technology
  4. c语言二次函数拟合,二次函数拟合算法
  5. 还没搞懂串口通信?一文带你读懂
  6. 自动化测试元素查找利器firepath介绍
  7. ndr4108贴片晶振是多少频率_流处理器、核心频率、 位宽……这些显卡参数你知道吗?—— 电脑硬件科普篇(八)...
  8. 转【是什么浪费了我的时间 】
  9. 鼎立测试软件能锁网吗,路测软件鼎利通信Pioneer操作培训PPT(ET128).ppt
  10. 西安交大计算机考研分数线2020院线,西安交通大学2020年复试分数线
  11. Echarts使用感悟
  12. CRT和LCD显示器的区别
  13. 不需要再手写 onSaveInstanceState 了,因为你的时间非常值钱
  14. 数据分析:当回音哥唱music时,他在唱些什么~~~
  15. linux性能优化——利用perf火焰图分析内核调用
  16. Android视频添加时间水印
  17. 了解微信小程序、掌握微信小程序开发工具的使用、了解小程序的目录以及文件结构、掌握小程序中常用的组件、掌握WXML、WXSS、WXS的基本使用
  18. 微信公众号服务器搭建
  19. AS5245磁性角度传感器
  20. HC32F460 实现模拟U盘导入python脚本在19264点阵屏上绘图--RTthread移植

热门文章

  1. Vue.js开发环境搭建的介绍
  2. 出现could not find developer disk image解决办法和不受信任的开发者
  3. php页面get方法实现ajax,入门实例教程
  4. C# Lambda表达式 基础
  5. 题目:[NOIP2008]火柴棒等式
  6. android 一个有漂亮动画效果的Dialog
  7. android PreferenceActivity详解
  8. NDVI等植被相关指数
  9. visjs使用小记-1.创建一个简单的网络拓扑图
  10. FPGrowth算法总结复习