关于lua的一些想法

来源:互联网 发布:网络抄袭作家排行 编辑:程序博客网 时间:2024/06/05 20:38
首先自己根据操作系统先编译个适合自己操作系统的lua连接库,然后建立个空的win32控制台程序,添加新建.cpp文件,然后键入后边的代码,代码上有详细注释,大家可以自己看。
这里详细介绍下第二个main文件

图片

的东西,如上图键入以上代码,熟悉lua的同学一定很熟悉,不就是个简单的连错误处理都没有的加法函数嘛,没难度!有什么意义呢?这里就给大家介绍下这东西的作用,试想把这个函数内容放入xml文件,然后利用xml和c++配合上lua这会是一件多么神奇的事。然后可以看下运行效果,键入a如下图:

然后键入b,如图:

点击运行得到如图的结果:

然后附上详细实现代码(需要的同学可以下载):
/********************************************************
lua与c互相调用二
*********************************************************/
#include <stdio.h>
#include <iostream>
#pragma comment(lib,"lua.lib")
using namespace std;
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
lua_State* L;
int average(lua_State *L)
{
int n=lua_gettop(L);
double sum=0;
for (int i=0;i<=n;i++)
{
sum+=lua_tonumber(L,i);
}
lua_pushnumber(L,sum/n);
lua_pushnumber(L,sum);
lua_pushnumber(L,n);
/*标识函数有几个返回值*/
return 3;
}
int main ( int argc, char *argv[] )
{
/* 初始化Lua */
L=luaL_newstate();
lua_status(L);
/* 载入Lua基本库 */
luaL_openlibs(L);
/*注册函数*/
lua_register(L,"average",average);
/* 运行脚本 */
luaL_dofile(L, "main.lua");

lua_getglobal(L,"str");
char* str= (char*)lua_tostring(L,-1);
cout<<str;
/* 清除Lua */
lua_close(L);
/* 暂停 */
system("pause");
return 0;
}

/********************************************************
lua与c互相调用一
*********************************************************/

#include <stdio.h>
#include <iostream>

using namespace std;

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

#pragma comment(lib,"lua.lib")

lua_State* L;

int average(lua_State *L)
{
int n=lua_gettop(L);
double sum=0;
for (int i=0;i<=n;i++)
{
sum+=lua_tonumber(L,i);
}
lua_pushnumber(L,sum/n);
lua_pushnumber(L,sum);
lua_pushnumber(L,n);
/*标识函数有几个返回值*/
return 3;
}

int main ( int argc, char *argv[] )
{
/* 初始化Lua */
L=luaL_newstate();
lua_status(L);

/* 载入Lua基本库 */
luaL_openlibs(L);

char buffer[256];

while (fgets(buffer,sizeof(buffer),stdin)!=NULL)
{
int errors = luaL_loadbuffer(L,buffer,strlen(buffer),"line")||lua_pcall
(L,0,0,0);
if (errors)
{
fprintf(stderr,"%s",lua_tostring(L,-1));
lua_pop(L,1);
}
}
lua_pushnil(L);

/* 清除Lua */
lua_close(L);

/* 暂停 */
system("pause");

return 0;
}

以下是main.lua的代码

--Lib = {}
--Lib.foo = function (x,y) return x + y end
--Lib.goo = function (x,y) return x - y end

--a=io.read("*number")
--b=io.read("*number")

--print(Lib.foo(a,b),Lib.goo(a,b))

--[[
这是一个简单的求平均数的函数调用然后输入一段文字
用c++打印出来!
--]]

avg,sum,n = average(10,20,30,40,51)

print("平均数是",avg)
print("总数是",sum)
print("个数数是",n)

str = io.read();

大家有什么更好的东西欢迎交流!也许这是lua比较初级的东西,以后可能我会结合

msxml与lua及vc尝试着做一些好玩的东西,欢迎关注。

原创粉丝点击