Lua学习之2 :Lua调用C++函数
来源:互联网 发布:原生js获取input框 编辑:程序博客网 时间:2024/06/11 06:58
一. 分享内容
主要分享了在Lua中如何调用C++函数,包括传递参数、获取返回值。
二. 开始分享
在上一篇文章Lua学习之1 :C++调用Lua函数中分享想了如何在C++中调用
Lua函数,包括如何编译Lua库等,这里将略去那些重复的内容。
和在C++中调用Lua函数相似,在Lua中调用C++函数也需要做引用Lua库,
初始化Lua state等。不同的是,在Lua中如何调用C++函数需要做一个函数映射
的工作,即调用lua_register()函数注册C++函数,以便Lua找到C++函数。它的
第2参数是可在Lua中调用的函数名(string型,需加双引号),第3个参数是C++
中的函数名(直接填C++中的函数名,无需双引号)。
1. 编辑Lua脚本
这里是在myLua2.lua中写了以下内容,它调用了C++中的add()函数,并将结果
打印。
--test lua call c++ funcvar1 = 1000var2 = 2000sum = add(var1, var2) --call c++ func and get return valuestr = string.format("result of c++ func add(%d, %d) : %d" , var1 , var2 , sum)print(str)
2. 被Lua调用的C++函数
在Lua中调用的C++函数add(),作用是将传入的多个参数相加后将结果返回。
由于Lua中的函数的返回值可以是多个,所以需要注意C++中函数的返回值,这个
返回值表明了在Lua中调用它时得到的返回值的个数。
3. 实现Lua调用C++函数
有了Lua脚本,也有了C++函数,那如何实现调用呢?就像开始部分所说的,我
们需要初始化Lua state,初始化相关Lua库,做函数映射。具体见示例代码。
4. 示例代码
#include "stdafx.h"#include <stdlib.h>// include the lua headerextern "C"{#include "include/lua.h"#include "include/lualib.h"#include "include/lauxlib.h"};// include the lua lib#pragma comment(lib, "lib/lua51.lib")// func will be called by luastatic int add(lua_State* L);int _tmain(int argc, _TCHAR* argv[]){// 1. open lua statelua_State* L = lua_open(); // or call luaL_newstate()// 2. open lua base functionluaopen_base(L);// 3. open lua string libluaopen_string(L);// 4. register c++ func for lualua_register(L, "add", add);// 5. load and run lua scriptint err = luaL_dofile(L, "myLua2.lua");if(err){printf("luaL_dofile(L, 'myLua2.lua') error code : %d\n", err);system("pause");}system("pause");return 0;}// func will be called by luastatic int add(lua_State* L){// 1. get len of lua stackint n = lua_gettop(L);double sum = 0;// 2. get var form lua stackfor(int i = 1; i <= n; i++){sum += lua_tonumber(L, i); }// 3. push result to lua stacklua_pushnumber(L, sum); // 4. return the number of return valuereturn 1;}
三. 完整的工程
下载完整的工程。
0 0
- Lua学习之2 :Lua调用C++函数
- [lua]C调用lua函数
- Lua调用C函数
- lua 调用c函数
- Lua调用C函数
- lua调用c函数
- Lua调用C函数
- lua调用C函数
- lua调用C函数
- lua调用C函数
- Lua调用C函数
- lua调用c函数
- lua调用C函数
- lua调用C函数
- Lua调用C函数
- lua 调用c函数
- Lua调用C函数
- Lua调用C函数
- [leetCode 第1题] -- Find Minimum in Rotated Sorted Array
- 重载和模板的知识点
- 内核模块运行在哪
- 360公司2015年秋季校园招聘笔试考卷(技术类 D)部分试题程序验证和解析6
- Memory Analyzer tool(MAT)
- Lua学习之2 :Lua调用C++函数
- linux用户权限和文件权限
- Search a 2D Matrix
- 大数据在传统行业引爆后如何落地
- hdu 4950 打怪
- 搞了一天终于稍微成功在github上搭了个博客...
- Oulipo (poj 3461&&hdu 1686) KMP
- Least Common Ancestors
- 第八周项目1:分段函数求值