/************************LuaIncludeHead.h************************************/
#ifndef _LUAINCLUDEHEAD_H
#define _LUAINCLUDEHEAD_H
#pragma once
#ifdef __cplusplus
extern "C"{
#endif
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#pragma comment(lib, "lua5.1.lib")
#ifdef __cplusplus
};
#endif
#endif
/******************************LuaBase.h************************************/
#pragma once
#include "LuaIncludeHead.h"
class CLuaBase
{
public:
CLuaBase(void);
~CLuaBase(void);
virtual bool LoadLuaFile(const char* pFileName);
private:
virtual void Init();
virtual void Close();
protected:
lua_State *m_pLuaState;
};
/******************************LuaBase.cpp**********************************/
#include "LuaBase.h"
CLuaBase::CLuaBase(void)
{
m_pLuaState = NULL;
Init();
}
CLuaBase::~CLuaBase(void)
{
Close();
}
void CLuaBase::Init()
{
if(NULL == m_pLuaState)
{
m_pLuaState = lua_open();
luaopen_base(m_pLuaState);
luaL_openlibs(m_pLuaState);
}
}
void CLuaBase::Close()
{
if(NULL != m_pLuaState)
{
lua_close(m_pLuaState);
m_pLuaState = NULL;
}
}
bool CLuaBase::LoadLuaFile(const char* pFileName)
{
int nRet = 0;
if(NULL == m_pLuaState)
{
printf("[CLuaBase::LoadLuaFile]m_pLuaState is NULL.\n");
return false;
}
nRet = luaL_dofile(m_pLuaState, pFileName);
if (nRet != 0)
{
printf("[CLuaBase::LoadLuaFile]luaL_dofile(%s) is file(%d)(%s).\n", pFileName, nRet, lua_tostring(m_pLuaState, -1));
return false;
}
return true;
}
/*****************************LuaMathExecute.h*****************************/
#pragma once
#include "LuaBase.h"
class CLuaMathExecute : public CLuaBase
{
public:
CLuaMathExecute(void);
~CLuaMathExecute(void);
// 加、减、乘、除
bool CallMathFunc(const char* pFuncName, int nParam1, int nParam2, int *nResult);
};
/*****************************LuaMathExecute.cpp****************************/
#include "LuaMathExecute.h"
CLuaMathExecute::CLuaMathExecute(void)
{
}
CLuaMathExecute::~CLuaMathExecute(void)
{
}
// 加法
bool CLuaMathExecute::CallMathFunc(const char* pFuncName, int nParam1, int nParam2, int *nResult)
{
int nRet = 0;
if(NULL == m_pLuaState)
{
printf("[CLuaMathExecute::CallMathFunc]m_pLuaState is NULL.\n");
return false;
}
lua_getglobal(m_pLuaState, pFuncName);
lua_pushnumber(m_pLuaState, nParam1);
lua_pushnumber(m_pLuaState, nParam2);
nRet = lua_pcall(m_pLuaState, 2, 1, 0);
if (nRet != 0)
{
printf("[CLuaMathExecute::CallMathFunc]call function(%s) error(%d).\n", pFuncName, nRet);
return false;
}
if (lua_isnumber(m_pLuaState, -1) == 1)
{
*nResult = (int)lua_tonumber(m_pLuaState, -1);
}
return true;
}
/******************************LuaFirstProj.cpp*****************************/
//LuaFirstProj.cpp
// LuaFirstProj.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include "LuaMathExecute.h"
int main(int argc, char *argv[])
{
bool bResult = false;
int nParam1 = 12, nParam2 = 3, nResult = 0;
char *pLuaFile = "math.lua";
char *pFuncArray[4] =
{
"DoAdd", "DoSub", "DoMul", "DoDiv"
};
CLuaMathExecute luaExec;
if (luaExec.LoadLuaFile(pLuaFile))
{
printf("Load LUA File %s OK.\n", pLuaFile);
for (int i = 0; i < 4; i++)
{
bResult = luaExec.CallMathFunc(pFuncArray[i], nParam1, nParam2, &nResult);
if (bResult)
{
printf("%d and %d %s is %d.\n", nParam1, nParam2, pFuncArray[i], nResult);
}
}
}
system("pause");
return 0;
}
/****************************LUA脚本math.lua*******************************/
function DoAdd(x, y)
return (x + y)
end
function DoSub(x, y)
return (x - y)
end
function DoMul(x, y)
return (x * y)
end
function DoDiv(x, y)
if y == 0 then
return 0
end
return (x / y)
end
--print(DoDiv(6,0))
LUA第一个程序
最新推荐文章于 2020-12-23 16:55:27 发布