一、Lua简介
C++是一种编译型语言,执行效率高,但每次对程序修改都需要重新编译,当项目较大时,编译起来比较费时。
Lua是一种用C语言编写的脚本语言,源码开源,具有体积小,效率高的特点,可嵌入到应用程序中对应用程序进行拓展。因此可将其和C++程序结合起来,既保留了C++程序的高效性,又增添了可拓展性,也便于实现程序的热更新。
二、Lua安装配置
1.在网址(https://www.lua.org/ftp/)下载lua的源码
以lua-5.4.4为例,选择下载lua-5.4.4.tar.gz压缩包,将其解压。
2.将lua源码编译为dll
使用Visual Studio创建一个空的动态链接库项目,将lua-5.4.4.tar.gz压缩包中的src目录下的所有文件添加到动态链接库项目中进行编译生成对应的.dll和.lib文件。
【注意事项】
2.1将lua.c和luac.c从生成文件中排除
2.2在C/C++预处理器中加入预处理定义:LUA_BUILD_AS_DLL,不加入此宏定义,则不会生成.lib文件
3.将lua嵌入到自己的项目中
将lua的头文件所在目录加入到项目的附加包含目录中;将.dll和.lib文件所在目录加入到项目的附加库目录中;将.lib文件名添加项目的附加依赖项中
完成以上步骤后,就将lua嵌入到自己的项目中了
三、利用lua实现热更
以下写一个测试MFC的热更测试程序,界面如下:
功能主要是进行加法运算。上面三个Edit Control分别绑定double型变量m_num1,m_num2,m_num3来存储被加数、加数以及和;最下面的Edit Control绑定CString型变量m_func,用来存储lua语句;
“计算”按钮的响应函数为:
按钮响应函数
/*在此之前已经调用luaL_newstate和luaL_openlibs 分别创建了lua_State对象Lua并加载了基本库*/ UpdateData(TRUE); //从内存中加载lua函数 luaL_loadbuffer(Lua, m_func.GetBuffer(), m_func.GetLength(), "test"); lua_pcall(Lua, 0, 0, 0); //调用从内存中加载的函数 lua_getglobal(Lua, "add"); lua_pushnumber(Lua, m_num1); lua_pushnumber(Lua, m_num2); lua_pcall(Lua, 2, 1, 0); m_num3 = (double)lua_tonumber(Lua, -1); UpdateData(FALSE);
四、测试效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?