导读:对于C语言和Lua的互调在网上已经一大堆了,但是对于MFC和Lua的互调还是比较少的。所以这篇文章就讲述一下如何在MFC中调用Lua的函数。

实验环境:Visual C++ 6.0

代码:

extern C
{
    #include lua.h
    #include lualib.h
    #include lauxlib.h
}
#pragma comment(lib, lua51.lib)
lua_State *lua;


在窗口上拉进去一个Button,命名为"调用",然后添加点击响应函数

在响应函数中添加以下语句

lua = lua_open ();
if(lua)
{
    luaopen_base (lua);
    luaopen_table (lua);
    luaopen_string (lua);
    luaopen_math (lua);
    luaopen_debug (lua);
}

luaL_dofile(lua, test.lua); // 解释分析lua文件
lua_getglobal(lua, add); // 取到一个全局标号add,取的同时会把add函数压栈
lua_pushnumber(lua, 4); // 把第一个参数压入栈里
lua_pushnumber(lua, 5); // 第二个参数压栈
lua_checkstack(lua, 225);

if(lua_pcall(lua, 2, 1, 0) != 0) // 执行add函数
{
    AfxMessageBox(lua_pcall error!);
    return;
}

int d = (int)lua_tonumber(lua, -1); // 函数执行完了,执行结果被压栈,所以取得最顶端的一个数就是结果值,-1就是指取栈顶的值
CString str;
str.Format(%d`, d);
AfxMessageBox(str);
lua_pop(lua, 1); // 把值从栈里清除,pop(弹出)一个值
lua_close(lua);


最后一步,在项目目录下新建一个文件,命名为"test.lua",然后在里面输入以下内容,然后运行程序,点击按钮你将会看到效果。

function add ( ... )
    return arg[1] + arg[2];
end