V8.NET使用详解

1,下载V8.NET

V8.NET 下载地址:https://v8dotnet.codeplex.com/乐山天立机械有限公司

2,了解V8基本概念(虽然是讲V8.NET,还是先讲V8)

1、基本概念 

在使用v8引擎之前,必须知道三个基本概念:句柄(handle),作用域(scope),

上下文环境(context,大爷的老外的这个context就是绕口,没法翻译成中文,可

以简单地理解为运行环境也可以)

(1)句柄(Handle) 

从实质上来说,每一个句柄就是一个指向v8对象的指针,所有的v8对象必须使用句

柄来操作。这是先决条件,如果一个v8对象没有任何句柄与之相关联,那么这个对

象很快就会被垃圾回收器给干掉(句柄跟对象的引用计数有很大关系)。


(2)作用域(Scope) 

从 概念上理解,作用域可以看成是一个句柄的容器,在一个作用域里面可以有很多

很多个句柄(也就是说,一个scope里面可以包含很多很多个v8引擎相关的对 象

),句柄指向的对象是可以一个一个单独地释放的,但是很多时候(尤其是写一些

“有用”的程序的时候),一个一个地释放句柄过于繁琐,取而代之的是,可以 释

放一个scope,那么包含在这个scope中的所有handle就都会被统一释放掉了。

(3)上下文环境(Context) 

从 概念上讲,这个上下文环境(以前看一些中文的技术资料总出现这个词,天知

道当初作者们是如何想的,不过这事情就是约定俗成,大家都这么叫也就习惯了)

也可 以理解为运行环境。这就好比是linux的环境变量,在执行javascript脚本

的时候,总要有一些环境变量或者全局函数(这些就不用偶解释了吧?! 就是那些直

接拿过来就用,根本不需要关心这些变量或者函数在什么地方定义的)。偶们如

果要在自己的c++代码中嵌入v8引擎,自然希望提供一些c++编写 的函数或者模

块,让其他用户从脚本中直接调用,这样才会体现出javascript的强大。从概念

上来讲,java开发中,有些功能jvm不提供,大家可 以用c/c++编写jni模块,通

过java调用c/c++模块来实现那些功能。而类比到javascript引擎,偶们可以用

c++编写全局函数,让其 他人通过javascript进行调用,这样,就无形中扩展了

javascript的功能。java+jni的开发模式与 javascript+c++module是一样的

思路,只是java更加复杂,系统库更加丰富;而javascript相对java来说比较

简单,系统 库比较少。仅此而已。(from:http://wuhuizhong.iteye.com/

blog/1107633)

3,使用v8.NET(以V8.Net-Console测试为例)

解压文件包


如下图,引用V8.NET和.V8.Net.SharedTypes两个库



打开测试项目V8.NET-Console

在Program.cs文件中看到v8.net的代码使用方法

实例化引擎


注册在V8引擎中使用的数据类型(不是必须注册,但是如果不注册则不能用一些高级功能,例如不能访问对象内部的一些属性,但是注册之后就可以访问)



设置全局句柄,绑定.net对象。这样就可以在JavaScript脚本中调用绑定的.net对象





在JavaScript定义函数


在.net中调用JavaScript中的对象


OK,希望本文对您有所帮助。如果不懂的可以直接加我qq:361058057

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ARM V8 是一种 64 位的 ARM 处理器架构,其汇编指令集包含了大量的指令,可以用于编写高效的汇编代码。下面是一些常见的 ARM V8 汇编指令及其功能: 1. MOV 指令:将数据从一个寄存器移动到另一个寄存器中。例如: ``` mov x1, x0 ``` 上面的代码将寄存器 x0 中的值移动到寄存器 x1 中。 2. ADD 指令:将两个寄存器中的值相加,并将结果存储到一个目标寄存器中。例如: ``` add x0, x1, x2 ``` 上面的代码将寄存器 x1 和 x2 中的值相加,结果存储到寄存器 x0 中。 3. SUB 指令:将两个寄存器中的值相减,并将结果存储到一个目标寄存器中。例如: ``` sub x0, x1, x2 ``` 上面的代码将寄存器 x1 中的值减去寄存器 x2 中的值,结果存储到寄存器 x0 中。 4. CMP 指令:比较两个寄存器中的值,并设置标志位。例如: ``` cmp x0, x1 ``` 上面的代码将比较寄存器 x0 和 x1 中的值,并设置标志位。 5. B 指令:无条件跳转到一个指定的地址。例如: ``` b label ``` 上面的代码将跳转到标签为 "label" 的地址处。 6. BEQ 指令:如果标志位为 "等于",则跳转到一个指定的地址。例如: ``` beq label ``` 上面的代码将在标志位为 "等于" 时跳转到标签为 "label" 的地址处。 7. LDR 指令:从内存中加载数据到一个寄存器中。例如: ``` ldr x0, [x1] ``` 上面的代码将从地址为 x1 的内存中加载数据到寄存器 x0 中。 8. STR 指令:将一个寄存器中的数据存储到内存中。例如: ``` str x0, [x1] ``` 上面的代码将寄存器 x0 中的数据存储到地址为 x1 的内存中。 以上是一些 ARM V8 汇编指令的示例,实际上还有很多其他的指令可以用于实现各种功能。需要注意的是,汇编指令的使用需要非常小心,因为这些指令对硬件的操作是直接的,不像高级语言那样具有一定的抽象层次和安全机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值