C/C++调用lua脚本函数

游戏服务端开发也有一段时间了,现在充分体会到脚本的方便与实用。下面简单介绍一下lua有基本用法。

第一步:声明Lua对象指针

lua_State* L;

第二步:初始化lua对象指针与库

L = lua_open();
luaL_openlibs(L);

第三步:加载lua脚本文件

luaL_dofile(L, "xx.lua");

第四步:执行lua中的函数

lua_pcall(L, 2, 1, 0);

2表示传入参数的个数,1为函数返回值个数。

第五步:关闭lua指针

lua_close(L);
L = NULL;

 

下面通过实例说明具体用法:

 

头文件LuaFn.h

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文件对应一个。 };

 

实现文件LuaFn.cpp

void CLuaFn::Init() { if(NULL == m_pState) { m_pState = lua_open(); luaL_openlibs(m_pState); } } 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_getglobal(m_pState, pFunctionName); lua_pushnumber(m_pState, nParam1); lua_pushnumber(m_pState, nParam2); 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; }

main.cpp

#include “LuaFn.h” int _tmain(int argc, _TCHAR* argv[]) { CLuaFn LuaFn; //LuaFn.InitClass(); LuaFn.LoadLuaFile(“Sample.lua”); LuaFn.CallFileFn(“func_Add”, 11, 12); getchar(); return 0; }

你可能感兴趣的:(function,脚本,File,null,Class,lua)