码迷,mamicode.com
首页 > 编程语言 > 详细

lua和c++交互 学习记录之一:C++嵌入脚本

时间:2016-09-19 13:01:03      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍)

部分内容查阅自:《Lua 5.3  参考手册》中文版 译者 云风 制作 Kavcc

 

vs2013+lua-5.3.3

1.首先需要编译出lua库

①创建一个静态库工程,将lua-5.3.3里的所有文件包含到工程里面去

②进行编译就可以得到一个lua的静态库,提供给后面的测试项目使用

 

2.创建学习测试console项目

①引入上面步骤生成的lua静态库

②包含lua的所有头文件

③创建一个hello.lua,里面的内容只有一句

print("Hello world !")

 

3.测试项目里的c++代码

 

 1 #include <iostream>
 2 
 3 //这个头文件包含了所需的其它头文件
 4 #include "lua.hpp"
 5 
 6 static const luaL_Reg lua_reg_libs[] = {
 7     { "base", luaopen_base},
 8     { NULL, NULL },
 9 };
10 
11 int main(int argc, char* argv[])
12 {
13     if (lua_State* L = luaL_newstate()){
14 
15         //注册让lua使用的库
16         const luaL_Reg* lua_reg = lua_reg_libs;
17         for (; lua_reg->func; ++lua_reg){
18             luaL_requiref(L, lua_reg_libs->name, lua_reg->func, 1);
19             lua_pop(L, 1);
20         }
21 
22         //加载脚本,如果出错,则打印错误
23         if (luaL_dofile(L, "hello.lua")){
24             std::cout << lua_tostring(L, -1) << std::endl;
25         }
26 
27         lua_close(L);
28     }
29     else{
30         std::cout << "luaL_newstate error !" << std::endl;
31     }
32 
33     system("pause");
34 
35     return 0;
36 }

 

 

 

 

4.部分函数解析

(1)void luaL_requiref (lua_State *L, const char *modname,lua_CFunction openf, int glb);

①如果 modname 不在 package.loaded 中, 则调用函数 openf ,并传入字符串 modname。 将其返回值置入 package.loaded[modname]。

这个行为好似该函数通过 require 调用过一样。

如果 glb 为真, 同时也将模块设到全局变量 modname 里。
在栈上留下该模块的副本。

②查看lualib.h文件,里面可引入的库如下:

 

 1 static const luaL_Reg lua_reg_libs[] = {
 2     { "base", luaopen_base},
 3     { "coroutine", luaopen_coroutine },
 4     { "table", luaopen_table },
 5     { "io", luaopen_io },
 6     { "os", luaopen_os },
 7     { "string", luaopen_string },
 8     { "utf8", luaopen_utf8 },
 9     { "bit32", luaopen_bit32 },
10     { "math", luaopen_math },
11     { "debug", luaopen_debug },
12     { "package", luaopen_package },
13     { NULL, NULL },
14 };

 

 

 

(2)int luaL_dofile (lua_State *L, const char *filename);

加载并运行指定的文件。 它是用下列宏定义出来:

(luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET,0))
如果没有错误,函数返回假; 有错则返回真。

 



 

lua和c++交互 学习记录之一:C++嵌入脚本

标签:

原文地址:http://www.cnblogs.com/chevin/p/5884657.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!