LUA第一个程序

/************************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))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值