在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
(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中还要引入相应的库。截图如下:
|
请发表评论