lua与c的交互(运用)
Posted gd-luojialin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua与c的交互(运用)相关的知识,希望对你有一定的参考价值。
(1)lua程序
(2)C++程序(头文件)
extern "C"
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
;class CLuaFn
public:
CLuaFn(void);
~CLuaFn(void);
void Init(); //初始化Lua对象指针参数
void Close(); //关闭Lua对象指针
bool LoadLuaFile(const char* pFileName); //加载指定的Lua文件
bool CallFileFn(const char* pFunctionName, int nParam1, int nParam2); //执行指定Lua文件中的函数private:
lua_State* m_pState; //这个是Lua的State对象指针,你可以一个Lua文件对应一个
;
(3)C++程序(.cpp文件)
#include "CLuaFn.h"
CLuaFn::CLuaFn(void)m_pState = NULL;; //这句干嘛
CLuaFn::~CLuaFn(void);
//初始化函数void CLuaFn::Init()
if (NULL == m_pState)
m_pState = lua_open(); //返回一个lua对象指针
luaL_openlibs(m_pState); //加载了所有你可能用到的Lua基本库
//关闭Lua对象并释放资源void CLuaFn::Close()
if(NULL != m_pState)
lua_close(m_pState);
m_pState = NULL;
bool CLuaFn::LoadLuaFile(const char* pFileName)
int nRet = 0;
if (NULL == m_pState)
printf("[CLuaFn::LoadLuaFile]m_pState is NULL./n");
return false;
//加载文件的时候尽量放在程序的初始化中
nRet = luaL_dofile(m_pState, pFileName);
if (nRet != 0)
printf("[CLuaFn::LoadLuaFile]luaL_loadfile(%s) is file(%d)(%s)./n", pFileName, nRet, lua_tostring(m_pState, -1));
return false;
return true;
bool CLuaFn::CallFileFn(const char* pFunctionName, int nParam1, int nParam2)
int nRet = 0;
if (NULL == m_pState)
printf("[CLuaFn::CallFileFn]m_pState is NULL./n");
return false;
//验证你的Lua函数是否在你当前加载的Lua文件中,并把指针指向这个函数位置 lua_getglobal(m_pState, pFunctionName);
// 压栈(顺序:从左到右的参数):第一个参数 lua_pushnumber(m_pState, nParam1);
// 压栈:第二个参数 lua_pushnumber(m_pState, nParam2);
//执行这个函数,2是输入参数的个数,1是返回值的个数
nRet = lua_pcall(m_pState, 2, 1, 0);
if (nRet != 0)
printf("[CLuaFn::CallFileFn]call function(%s) error(%d)./n", pFunctionName, nRet);
return false;
if (lua_isnumber(m_pState, -1) == 1)
int nSum = lua_tonumber(m_pState, -1);
printf("[CLuaFn::CallFileFn]Sum = %d./n", nSum);
return true;
(4)C++程序(main文件)
#include "CLuaFn.h"int main(int argc, char* argv[])
CLuaFn LuaFn;
LuaFn.Init();
LuaFn.LoadLuaFile("Sample.lua");
LuaFn.CallFileFn("func_Add", 11, 12);
getchar();
return 0;
注:程序中的注释已经很详尽,这里不在对代码进行解释。下载安装lua之后,在vs2010中还要引入相应的库。截图如下:
以上是关于lua与c的交互(运用)的主要内容,如果未能解决你的问题,请参考以下文章
lua 与 c++或者c 交互的底层原理谁能解释一下?最最底层的,为啥它们调用C或者C++的函数?