VC和LUA混合开发之VC程序调用Lua脚本函数

               

作者:朱金灿
来源:http://blog.csdn.net/clever101/


     Lua语言以其卓越的可扩展性、简单、高效率和与平台无关性在游戏领域得到广泛应用。今天花了一些时间学习VC和Lua如何混合开发,编写了一个小例程,和大家分享一下这方面的经验。


          首先在http://www.lua.org/ftp/下载Lua的最新版本:lua-5.1.4。然后用VS C++ 2005 + sp1建一个Win32静态库空工程:lua,把相关c文件和h文件都添加进来。为了导出了lua的api接口,注意添加一个预处理宏:LUA_CORE(或者是LUA_LIB也可以),另外运行时库采用多线程DLL。


           首先编写一个Lua脚本函数,代码如下:


function add ( x, y )return x + y;end 


将这个代码保存为add.lua。

扫描二维码关注公众号,回复: 5075966 查看本文章


      接着我们新建一个MFC对话框工程:Calc。这个程序实现简单整数加法运算。
首先在对话框类定义一个Lua虚拟机指针以及加法运算所需要的变量:


 /** * /brief LUA 虚拟机指针。 */ lua_State *m_plua; /** * /brief 加法运算的左操作数。 */ int m_nLeftNum; /** * /brief 加法运算的左操作数。 */ int m_nRightNum; /** * /brief 加法运算的结果。 */ long m_nResult; 


       在对话框初始化函数CCalcDlg::OnInitDialog调用LUA虚拟机初始化函数InitLuaState。InitLuaState函数的代码如下:

/*!*  /brief 初始化Lua虚拟机。**  /return 无。*/void CCalcDlg::InitLuaState(){ m_plua = lua_open();  if(NULL!=m_plua) {  luaopen_base(m_plua);  luaopen_table(m_plua);  luaopen_string(m_plua);  luaopen_math(m_plua);  luaopen_debug(m_plua); } } 


       在对话框的销毁消息响应函数里关闭Lua虚拟机:

void CCalcDlg::OnDestroy(){ CDialog::OnDestroy(); // TODO: 在此处添加消息处理程序代码    lua_close (m_plua); } 


在执行加法按钮的消息函数里添加如下代码:


void CCalcDlg::OnBnClickedOk(){ // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); StackDump(m_plua);     string strLuaFile = _T("");    GetLuaFile(strLuaFile);  // 得到lua脚本文件全路径 luaL_dofile(m_plua,strLuaFile.c_str());     // 解释分析lua文件 StackDump(m_plua); lua_getglobal(m_plua,_T("add"));       // 取到一个全局标号add,取的同时会把add函数压栈 StackDump(m_plua);    lua_pushnumber(m_plua,m_nLeftNum);        // 把第一个参数压入栈里 StackDump(m_plua); lua_pushnumber(m_plua,m_nRightNum);        // 第二个参数压栈 StackDump(m_plua); if(lua_pcall(m_plua,2,1,0)!= 0)        // 执行add函数 {  AfxMessageBox(_T("调用lua脚本函数失败"));              return; } StackDump(m_plua); m_nResult = (int)lua_tonumber(m_plua, -1);        // 函数执行完了,执行结果被压栈,所以取得最顶端的一个数就是结果值,-1就是指取栈顶的值 StackDump(m_plua); lua_pop(m_plua,1);      // 把值从栈里清除,pop(弹出)一个值 StackDump(m_plua);  UpdateData(FALSE);} 


          编译环境为:WinXp + sp3, VS C++2005 + sp1,程序运行界面如下:

VC Combine Lua



相关源码在这里下载:VC程序调用Lua脚本函数程序源码下载


参考文献:


1. LUA 和C之间的函数调用


2. LUA整合进MFC代码














           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/gdruhv/article/details/86633040