转自http://blog.csdn.net/feiyinzilgd/article/details/8248448

上一章讲到了V8的编译和安装,这一章开始从一个demo着手。

这里选用了官方文档的一个非常简洁的HelloWorld.cc,代码如下:

  1. #include <v8.h>
  2. using namespace v8;
  3. int main(int argc, char* argv[]) {
  4. // Create a stack-allocated handle scope.
  5. HandleScope handle_scope;
  6. // Create a new context.
  7. Persistent<Context> context = Context::New();
  8. // Enter the created context for compiling and
  9. // running the hello world script.
  10. Context::Scope context_scope(context);
  11. // Create a string containing the JavaScript source code.
  12. Handle<String> source = String::New("'Hello' + ', World!'");
  13. // Compile the source code.
  14. Handle<Script> script = Script::Compile(source);
  15. // Run the script to get the result.
  16. Handle<Value> result = script->Run();
  17. // Dispose the persistent context.
  18. context.Dispose();
  19. // Convert the result to an ASCII string and print it.
  20. String::AsciiValue ascii(result);
  21. printf("%s\n", *ascii);
  22. return 0;
  23. }

我的目录结构如下:

编译运行:

  1. g++ -I../include helloworld.cc  -o helloworld -lpthread -lv8
  1. ./helloworld

就可以在屏幕上看到输出结果了。

看到demo上有一些Context,Scope,Value等等,先不要慌张,其实就是V8的一些基本 数据类型,这些在后面会逐个一一讲到。

  1. Handle<String> source = String::New("'Hello' + ', World!'");

看到这句话,其实就是在加载一个js文件了。只不过这个js文件内容为:

  1. 'Hello' + ', World!'

那么这里,source就已经是加载过的js文件字符串内容了,接下来V8需要对js进行编译解释。

  1. Handle<Script> script = Script::Compile(source);
  2. Handle<Value> result = script->Run();

最后就是JS的执行了。这里虽然只有简单的几个语句,但是V8对于JS的编译和运行做了很多很复杂的操作。关于V8是如何编译和运行JS的,在后面章节将做详细的分析。

版权申明:
转载文章请注明原文出处,任何用于商业目的,请联系本人:hyman_tan@126.com

Google V8编程详解(二)HelloWorld的更多相关文章

  1. Google V8编程详解附录

    Google V8编程详工具函数 头文件:utils.h #ifndef UTILS_H_ #define UTILS_H_ #include "v8.h" #include &l ...

  2. Google V8编程详解(五)JS调用C++

    http://blog.csdn.net/feiyinzilgd/article/details/8453230 最近由于忙着解决个人单身的问题,时隔这么久才更新第五章. 上一章主要讲了Google ...

  3. Google V8编程详解(三)Handle & HandleScope

    上一章简单的演示了一个Helloworld Demo.里面涉及到了V8的一些基本类型和概念,本章将围绕这个Demo对V8的基本类型和相关概念进行讲解. 这里还是先把Demo贴出来便于后面分析: #in ...

  4. Google V8编程详解(四)Context

    http://blog.csdn.net/feiyinzilgd/article/details/8266780 上一章,比较略提了下V8的Context.本章将详细的讲解下Context的概念以及用 ...

  5. Google V8编程详解(序)Cloud App

    此系列文章转载于此http://blog.csdn.net/feiyinzilgd/article/details/8247723          应用程序发展到今天,应用程序的概念也在不断地发生着 ...

  6. Google V8编程详解(一)V8的编译安装(Ubuntu)

    V8的编译比较简单,需要同时安装git和svn. 下载V8源码: git clone git://github.com/v8/v8.git v8 && cd v8 切换到最新版本: g ...

  7. Linux 网络编程详解二(socket创建流程、多进程版)

    netstat -na | grep " --查看TCP/IP协议连接状态 //socket编程提高版--服务器 #include <stdio.h> #include < ...

  8. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日 ...

  9. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

随机推荐

  1. 坑的可以呀re

    .findall()   直接匹配字母和数字 元字符:. ^ $ * + ? {} [] () \ import re print(re.findall("alex"," ...

  2. C#获取真实IP地址实现方法

    通常来说,大家获取用户IP地址常用的方法是: string IpAddress = ""; if((HttpContext.Current.Request.ServerVariab ...

  3. zzz

    开放平台(TOP)的API是基于HTTP协议来调用的,开发者(ISV)可以直接使用TOP提供的官方SDK(支持多种语言,包含了请求的封装,签名加密,响应解释,性能优化等)来调用,也可以根据TOP的协议 ...

  4. AS快捷键

    Ctrl+Q 显示关键字的提示文档 Ctrl+鼠标点击 查看关键字的源码 ctrl+T 在不同的选项卡中进行切换 ctrl+J 提示当前位置输入模板 Ctrl+P 提示参数 Alt+Enter 提示 ...

  5. Ubuntu14.04 安装Gitlab

    安装ubuntu 操作系统 除了 openssh server 其它都不需要 配置软件源 root@gitlab:~# cat /etc/apt/sources.list deb http://mir ...

  6. 修改sys密码与nbu备份脚本密码后,nbu备份报密码无效

    公司要求口令强化,在修改sys密码后nbu的.sh脚本connect备份归档的sys/passwd也随之修改修改后每个业务备份均失败, 每次备份到归档那里就结束报密码无效,疑惑备份脚本密码也同步修改了 ...

  7. cocos2d-x3.2创建新项目失败的一种可能性(cygwin自带的python2.6被抢先执行)

    之前一直使用cocos2d-x2.2写游戏,写了几个游戏后,想尝试下3.x版本的新功能,就下载了cocos2d-x3.2版本. 参照官方文档的说法,cocos2d-x3.x版本需要python2.7环 ...

  8. java 项目创建中的问题汇总

    eclipse 创建maven项目时 报错 Unable to create project from archetype [org.apache.maven.archetypes:ma 你看看你ma ...

  9. QTP操作txt文档

    QTP可以在txt文件(文本文件中读取数据) 首先创造一个文档对象 set fso = createObject("scripting.filesystemobject") 然后用 ...

  10. JS正则大全

    验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证 ...