简介
为应用程序增加一个脚本语言的支持是个不错的主意,可以动态地扩展程序的功能,增加用户的使用灵活性。为此查询去了解了一些脚本语言。目前来看,Lua 是个不错选择,原因如下:
好吧,撸上一把!
从官方下载源代码(Lua 官网),目前最新的版本是 5.3.1。在这里我要以动态链接库的形式使用它,所以要将源代码编译、构建为动态链接库:lua53.dll。
如何构建 Lua 的动态链接库?
一般只需将除 lua.c(解释器)和 luac.c(编译器)之外的所有头文件和源文件加入工程并修改配置文件 luaconf.h ,在其开头加入宏定义 #define LUA_BUILD_AS_DLL 即可。编译、构建过程没有遇到什么麻烦,很顺利就生成了 dll 文件(Qt 中如何创建和使用库)。要注意,这里生成的 dll 是用 c 语言写的,C++ 调用的时候可以直接包含头文件 lua.hpp。
动态链接库的编译开关比较有特色,可以学习一下。在 luaconf.h 定义了如下内容:
#if defined(LUA_BUILD_AS_DLL) /* { */
#if defined(LUA_CORE) || defined(LUA_LIB) /* { */
#define LUA_API __declspec(dllexport)
#else /* }{ */
#define LUA_API __declspec(dllimport)
#endif /* } */
#else /* }{ */
#define LUA_API extern
#endif /* } */
在头文件的函数声明和源文件中的函数定义中都加了 LUA_API 声明,巧妙地通过在源文件中定义 LUA_CORE 或 LUA_LIB 而头文件中不定义的方式实现了编译动态库时使用了 __declspec(dllexport) 导出声明,而在用户包含头文件使用动态库时使用了 __declspec(dllimport) 导入声明。
如何使用这个动态链接库?
本文通过最简单的形式------控制台程序展示一下如何使用生成的 lua53.dll。
1、创建一个控制台程序项目
2、在项目文件中加入库的路径
LIBS += ./lua53.dll #makefile所在目录
在项目中加入 Lua 的头文件,放置于 lua53 文件夹(随意)。
3、编写 main()
参考 lua.c 源代码写 main.cpp 的代码。如果图省事,直接拷贝 lua.c 源代码覆盖 main.cpp 的代码,替换几个 Lua 头文件的引用为 #include "lua53/lua.hpp" 即可,效果跟直接编译解释器 lua.c 没有什么区别了。
如果需要对 Lua 的使用多些了解,可以着重看一下几个函数的用法:luaL_newstate 、luaL_openlibs 、luaL_dofile 、luaL_dostring 、 lua_close 的基本用法。关于 Lua 的使用下次再写。
|