C/C++调用lua脚本函数
2010-07-01 20:11
344 查看
游戏服务端开发也有一段时间了,现在充分体会到脚本的方便与实用。下面简单介绍一下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
实现文件LuaFn.cpp
main.cpp
第一步:声明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; }
相关文章推荐
- C/C++调用lua脚本函数
- 用VC加载Lua.lib,C++调用lua脚本函数
- C/C++调用lua脚本函数
- tolua 使用 Lua调用c++多返回值函数
- lua和c/c++互相调用实例分析
- 简单C++调用lua函数及C++和lua相互函数调用小例子
- Lua学习笔记6:C++和Lua的相互调用
- 最简单的C++中调用LUA函数源代码
- C++调用Lua
- C++ 和 lua代码互相调用
- VC++6.0配置LUA环境和C++调用LUA的简单示例
- C++调用Lua读取配置文件的一个简单例子
- C++与Lua5.3.2的相互调用
- D'Fusion中lua调用c++生成的dll库,并且lua调用c++代码(遍历文件夹中整个目录)
- Cocos2dx -- 入门之c++ 调用lua
- 创建一个调用lua方法的C++工程
- Cocos2d-x3.0下 Lua与C++相互调用
- Lua与C++ 第六篇(Lua调用C++的函数)
- lua与c++的相互调用、C/C++修改Lua中Table的内容
- Lua与C/C++的交互6:Lua调用C/C++函数