v8学习笔记(八) 【JS与C++互调】
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++互调】相关推荐
- ReactJS学习笔记八:动画
ReactJS学习笔记八:动画 分类: react学习笔记 javascript2015-07-06 20:27 321人阅读 评论(0) 收藏 举报 react动画 目录(?)[+] 这里只讨论Re ...
- 【opencv学习笔记八】创建TrackBar轨迹条
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...
- ROS学习笔记八:创建ROS msg和srv
ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...
- Halcon 学习笔记八:颜色识别
Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...
- ZooKeeper学习笔记(八):ZooKeeper集群写数据原理
写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...
- MongoDB 学习笔记八 复制、分片、备份与恢复、监控
MongoDB 学习笔记八 复制.分片.备份与恢复.监控 MongoDB复制(副本集) 什么是复制? MongoDB 复制原理 MongoDB 副本集设置 副本集添加成员 MongoDB 分片 分片 ...
- 前端学习笔记(js基础知识)
前端学习笔记(js基础知识) JavaScript 输出 JavaScript 数据类型 常见的HTML事件 DOM 冒泡与捕获 流程控制语句 for..in 计时器 let,var,const的区别 ...
- python3第三方库手册_python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑...
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...
最新文章
- vim常用命令总结 (转)
- Java怎么把数组怎么放入set,如何将数组转换为Java中的Set
- Mind the Gap: Upgrading Genomes with Pacific Biosciences RS Long-Read Sequencing Technology
- c语言二次函数拟合,二次函数拟合算法
- 还没搞懂串口通信?一文带你读懂
- 自动化测试元素查找利器firepath介绍
- ndr4108贴片晶振是多少频率_流处理器、核心频率、 位宽……这些显卡参数你知道吗?—— 电脑硬件科普篇(八)...
- 转【是什么浪费了我的时间 】
- 鼎立测试软件能锁网吗,路测软件鼎利通信Pioneer操作培训PPT(ET128).ppt
- 西安交大计算机考研分数线2020院线,西安交通大学2020年复试分数线
- Echarts使用感悟
- CRT和LCD显示器的区别
- 不需要再手写 onSaveInstanceState 了,因为你的时间非常值钱
- 数据分析:当回音哥唱music时,他在唱些什么~~~
- linux性能优化——利用perf火焰图分析内核调用
- Android视频添加时间水印
- 了解微信小程序、掌握微信小程序开发工具的使用、了解小程序的目录以及文件结构、掌握小程序中常用的组件、掌握WXML、WXSS、WXS的基本使用
- 微信公众号服务器搭建
- AS5245磁性角度传感器
- HC32F460 实现模拟U盘导入python脚本在19264点阵屏上绘图--RTthread移植