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