一如往常以样,无聊的发愣,想想不如在哪里写点东西。想来想去就继续写lua吧,因为发现网上的教程实在是少的可怜。今天写的是使用VC6.0怎么样调用Lua中的一个有参函数,在上一次的教程中我只是写了一个无参的函数,没有写到关于有参的函数,今天就补上,如果你还没有搭建lua环境就看到这篇文章,那么就先请你到下面这个网址里看一下怎么搭建一个Lua环境和怎么样用VC++写第一个Lua程序吧。
http://blog.csdn.net/kingsollyu/article/details/6613468
OK,我废话也就不多啰嗦了,下面就开始我们的代码之旅吧。使用的依然是VC++6.0中的一个Hello Wrold 程序。代码和上次的也差不多,首先我们先新建一个Lua文件。如果说你不会建,那么你就先新建一个“文本文件”,然后把后面的【.txt】给换成【.lua】就可以了,然后在上面右击选择【Edit Script】就会打开【SciTE】,记住你保存的这个文件名的名称,在这里我依然是使用的上次一例子中的【test.lua】。我使用上一次的完全等于你新建一个,所以你不要以为我使用了上次的文件而导致你对这篇文章中的代码不够完整,进行不下去。好了,打开你的LUA脚本之后,在里面输入下面的内容,当然我的是追加的。
--这是一个求最大数的函数
--a,b是想要输入参数,返回出来的是最大数
-- by:King.Sollyu 2011年7月20日
function Max(a,b)
if a < b then --判断是a大还是b大
return b --如果a<b这个式子成立,那么就说明b>a,返回b的值
else
return a --否则就是a>b就反回出a的值
end
end --函数结束
然后保存一下,记住你的文件路径。打开VC 6.0新建一个Hello World程序,然后把下面代码贴到你的程序里面去
#include "StdAfx.h"
#include <conio.h>
//包含必要的头文件
extern "C" {
#include "lua.h"
#include <lauxlib.h>
#include <lualib.h>
}
//连接lua的函数库
#pragma comment(lib,"lua5.1.lib")
int main (void)
{
lua_State *L = lua_open(); /* 打开 Lua */
luaL_openlibs(L); /* 加载 .lib 文件 */
// 加载脚本文件,需要放在程序目录
luaL_loadfile( L, "test.lua" );
printf("请输入两个数进行比较大小[中间用逗号隔开]:");
int a,b;
scanf("%d,%d",&a,&b);
// 复位lua
lua_resume( L, 0 );
lua_getglobal(L,"Max"); // 找到max函数的入口
lua_pushinteger(L,a); // 传入第一个参数
lua_pushinteger(L,b); // 传入第二个参数
/*
* int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc)
* 参数:lua_State *L [必须为L]
* 参数:int nargs [要传入的参数的个数]
* 参数:int nresults [返回的个数]
* 参数:int errfunc[函数错误调用的函数]
*/ lua_pcall(L,2,1,NULL); // 调用Max函数
// 输出计算结果
printf("cmp %d and %d the Max: %ld\n",a,b,lua_tointeger(L,-1)) ;
lua_pop(L,1) ; // 清除堆栈 清除计算结果
// 调用结束
lua_close(L);
getch();
return 0;
}
我想我写的已经够详细的了。赶快去试一下吧。下面是我的测试结果
请输入两个数进行比较大小[中间用逗号隔开]:12,23
cmp 12 and 23 the Max: 23
其中仅代表我个人的理解,因为我也是初学,里面可能有错误或者是错的一塌糊涂还请大家多多指正。
本文章的代码载地址:http://download.csdn.net/source/3455111