您的位置:首页 > 编程语言 > Lua

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

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息