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