当前位置: 首页 > news >正文

湖北企业建站系统平台苏州工业园区公积金

湖北企业建站系统平台,苏州工业园区公积金,大连网页网站制作,中型网站 收益一、Lua简介 Lua 是一种强大的、高效的、轻量级的、可嵌入的脚本语言。它支持过程(procedural)编程、面向对象编程、函数式编程以及数据描述。Lua 是动态类型的,运行速度快,支持自动内存管理,因此被广泛用于配置、脚本…

一、Lua简介

Lua 是一种强大的、高效的、轻量级的、可嵌入的脚本语言。它支持过程(procedural)编程、面向对象编程、函数式编程以及数据描述。Lua 是动态类型的,运行速度快,支持自动内存管理,因此被广泛用于配置、脚本编写等场景。

二、Lua的优势

Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML、ini等文件格式,并且更容易理解和维护。 Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译、运行。 一个完整的Lua解释器不过200k,在所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

三、Qt + Lua 环境搭建

Lua是用标准C编写的,所以几乎常见的编程环境它都能编译Lua。下载源码包后,直接编译即可。

1、 下载Lua

下载地址:https://www.lua.org/ftp
在这里插入图片描述

2、 使用QtCreator编译lua.a库

打开QtCreator,新建项目 > Library > C++库,在后续弹出的窗口中选择 Statically Linked Library,根据向导完成项目的创建,然后删掉由向导添加的头文件和源文件。将除了lua.c和luac.c以外的文件加入到你的开发环境中进行编译即可。(文末有对应的pro文件,可以参考一下。)
ps:lua.c 和 luac.c 中都有main函数,需要分别编译这两个文件。其中,lua.c编译出来是解析器,luac.c编译出来是编译器。

四、在Qt中调用Lua

1、 新建一个math.lua文件,内容如下:

function fn_add(x,y)return x + y
endfunction fn_subtract(x,y)return x - y
endfunction fn_multiply(x,y)return x * y
endfunction fn_divide(x,y)return x*1.0 / y
end

2、Qt调用Lua的测试代码

新建Qt控制台程序,在该控制台程序的pro文件,配置一下lua库的头文件以及库文件路径:

CONFIG(debug, debug|release){DESTDIR = $$PWD/../bin/debugOBJECTS_DIR += $$PWD/../obj/debugDIR_NAME = debug
}
CONFIG(release, debug|release){DESTDIR = $$PWD/../bin/releaseOBJECTS_DIR += $$PWD/../obj/releaseDIR_NAME = release
}
INCLUDEPATH  += $$PWD/./3rdparty/libLua/include
LIBS += -L$$PWD/./3rdparty/libLua/lib/$${DIR_NAME}/ -lliblua

控制台main.cpp的代码如下:

#include <QCoreApplication>
#include <stdio.h>
extern "C"{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}lua_State *L;
double luaMath(std::string fname, int x, int y)
{/* 要调用一个函数请遵循以下协议:* 首先,要调用的函数应该被压入栈,接着把需要传递给这个函数的参数按正序压栈,* 这是指第一个参数首先压栈。最后调用一下 lua_call,当函数调用完毕后,* 所有的参数以及函数本身都会出栈,而函数的返回值这时则被压栈。*/double result;/*获取函数名*/lua_getglobal(L, fname.c_str());/*压入第一个参数*/lua_pushnumber(L, x);/*压入第二个参数*/lua_pushnumber(L, y);/*使用2个参数调用函数,返回1个结果。*/lua_call(L, 2, 1);/*获取结果*/result = (double)lua_tonumber(L,-1);/*清理返回结果*/lua_pop(L, 1);return result;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);L =  luaL_newstate();//新建lua解释器luaL_openlibs(L);//载入lua基础库#if 1//执行lua脚本:luaL_dofile(L, "lua/math.lua");//填写实际的math.lua文件的相对路径/*call the add function*/int sum = luaMath("fn_add", 10, 15);printf("sum = %d\r\n", sum);int subtract = luaMath("fn_subtract", 10, 15);printf("subtract = %d\r\n", subtract);int multiply = luaMath("fn_multiply", 10, 15);printf("multiply = %d\r\n", multiply);auto divide = luaMath("fn_divide", 10, 15);printf("divide = %.3f\r\n", divide);
#endif/*cleanup Lua*/lua_close(L);system("pause");return a.exec();
}

3、输出结果

sum = 25
subtract = -5
multiply = 150
divide = 0.667

五、附上lua库的pro文件内容:

QT -= guiTEMPLATE = lib
CONFIG += staticlibCONFIG += c++11#去掉生成空的debug和release目录
CONFIG -= debug_and_release# 编译时临时文件路径
RCC_DIR += $$PWD/../temp/rcc_tmp
MOC_DIR += $$PWD/../temp/moc_tmp
UI_DIR  += $$PWD/../temp/ui_tmpCONFIG(debug, debug|release){DESTDIR = $$PWD/../lib/debugOBJECTS_DIR += $$PWD/../obj/debugDIR_NAME = debug
}
CONFIG(release, debug|release){DESTDIR = $$PWD/../lib/releaseOBJECTS_DIR += $$PWD/../obj/releaseDIR_NAME = release
}# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \lapi.c \lauxlib.c \lbaselib.c \lcode.c \lcorolib.c \lctype.c \ldblib.c \ldebug.c \ldo.c \ldump.c \lfunc.c \lgc.c \linit.c \liolib.c \llex.c \lmathlib.c \lmem.c \loadlib.c \lobject.c \lopcodes.c \loslib.c \lparser.c \lstate.c \lstring.c \lstrlib.c \ltable.c \ltablib.c \ltm.c \lundump.c \lutf8lib.c \lvm.c \lzio.cHEADERS += \lapi.h \lauxlib.h \lcode.h \lctype.h \ldebug.h \ldo.h \lfunc.h \lgc.h \ljumptab.h \llex.h \llimits.h \lmem.h \lobject.h \lopcodes.h \lopnames.h \lparser.h \lprefix.h \lstate.h \lstring.h \ltable.h \ltm.h \lua.h \lua.hpp \luaconf.h \lualib.h \lundump.h \lvm.h \lzio.h# Default rules for deployment.
unix {target.path = $$[QT_INSTALL_PLUGINS]/generic
}
!isEmpty(target.path): INSTALLS += target#拷贝头文件到include目录下
win32 {SrcIncludeDir = $${PWD} #定义的宏变量,在非首位置使用时需要带{}SrcIncludeDir = $$replace(SrcIncludeDir, /, \\)DstIncludeDir = $$PWD/../include/DstIncludeDir = $$replace(DstIncludeDir, /, \\)#多条命令语句之间可以用&&隔开,自动连续执行QMAKE_POST_LINK += echo "---------prepare to copy *.h---------" && echo.QMAKE_POST_LINK += cd $$SrcIncludeDir &&  xcopy /s/y/i $$SrcIncludeDir\lauxlib.h $$DstIncludeDirQMAKE_POST_LINK += &&  xcopy /s/y/i $$SrcIncludeDir\lua.h $$DstIncludeDirQMAKE_POST_LINK += &&  xcopy /s/y/i $$SrcIncludeDir\luaconf.h $$DstIncludeDirQMAKE_POST_LINK += &&  xcopy /s/y/i $$SrcIncludeDir\lualib.h $$DstIncludeDir#打印测试#message("--SrcIncludeDir= $$SrcIncludeDir")#message("--DstIncludeDir= $$DstIncludeDir")
}
http://www.yayakq.cn/news/153600/

相关文章:

  • 动漫视频网站html模板wordpress本地迁移到服务器
  • 做搜狗pc网站快速网站首页关键词如何优化
  • 建设企业网站企业网银自己搭建网站要钱吗
  • 不能上传图片到网站广州定制网站设
  • 东莞网站建设最优女性门户网站源码
  • wordpress恢复旧版宁波seo服务推广
  • 网站建设与管理学校网站建设制作文案
  • 淄博网站制作定制升级长春网站制作允许吗
  • 个人网站开发合同会员系统网站制作
  • 响应式布局网站建设国内做网站哪家好
  • 做响应式网站的流程wordpress可爱的主题下载
  • 微信公众号怎么做的跟网站似的网站推广营销运营方式
  • wordpress 同步登录自己的网站怎么优化
  • 前端开发学习网站视频网站建设
  • 电子商务的网站建设要求步骤中国商检局做备案网站
  • 定西地网站建设企业文化墙装修效果图
  • 成都建设网站那个好网站添加锚点
  • 网站的主题定位手机端网站制作
  • 为什么网站要用外链购买域名之后怎么做网站
  • 做包装看什么网站前端简历
  • 长沙网站制作网站怎么做用户登录数据库
  • 深圳的设计企业网站昆明做网站多少钱
  • 创网网站后台管理系统优质网站建设
  • 网站建设报价费用是多少苏州 中英文网站建设
  • 解决网站兼容性问题网络规划设计师是干啥的
  • ssh蒙语网站开发wordpress评论时间
  • 导航网站建站系统云南建设厅网站首页
  • 网站上放的动画视频是怎么做的wordpress百度云
  • wordpress商家展示主题seo工作流程图
  • html制作企业宣传网站外国风格网站建设费用