在windows C++中编译并使用Lua脚本

早前就用过LUA ,只是局部的小项目使用,突然兴起想要写一些关于LUA 的  文章,记录曾经学习过的点点滴滴。

这里我使用的是LUA5.2作为 案例

lua做为轻量级脚本语言已经被广泛应用到应用软件以及游戏开发中,相比Perl以及python  lua的内核 只有100KB左右

可以很容易嵌入到语言级别 就好像语言本身的功能一样

以下来自百度全科:

Lua还具有其它一些特性:同时支持面向过程(procedure-oriented)编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程 [4] ,并非操作系统所支持的线程)支持;通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象虚函数继承重载等。

关于什么是闭包?以及如何使用闭包在下面这边文章中有 javascript对应的闭包问题。相信很多前端工程师并不陌生

闭包由于优缺点一直都是对半存在所以很多人是不建议程序中使用闭包的。

http://www.cnblogs.com/jeffwongishandsome/archive/2009/05/17/1458405.html 关于闭包的介绍

废话不多说,要使用LUA首先就要编译 LUA的内核,linux下相当简单

make

make install 就完事

windows下编译过程如下

如果你要编译静态库?

vs2010下首先创建如下 项目,记住去掉预编译头,因为lua是用C ,混合C/C++会造成预编译头冲突

创建不适用预编译头的 静态库 ,

导入lua代码到项目文件,选择你的lua代码导入  直接生成即可

如果你要编译动态库?

基本步骤同上相同 你在创建的时候创建一个dll项目 , 或者 直接修改项目属性 生成dll

你现在编译是编译不过的 ?你要去掉你的预编译选项!!!  不使用项目预编译头

这个时候你编译 OK通过了 也生成了 DLL ,那么问题来了 现在  咋没有生成.lib输入库呢!!!

实际上发现LUA内核导出函数都被声明为LUA_API开头

你需要添加几个预编译定义

LUA_BUILD_AS_DLL  这个告诉预处理器 代码按照DLL编译  并且定义导入导出

LUA_CORE      这个告诉预处理器 LUA_API 宏添加 上 dllexport导出定义   如果不添加就是直接使用dllimport

源代码如下

 1 #if defined(LUA_BUILD_AS_DLL)    /* { */
 2
 3 #if defined(LUA_CORE) || defined(LUA_LIB)    /* { */
 4 #define LUA_API __declspec(dllexport)
 5 #else                        /* }{ */
 6 #define LUA_API __declspec(dllimport)
 7 #endif                        /* } */
 8
 9 #else                /* }{ */
10
11 #define LUA_API        extern
12
13 #endif                /* } */

OK  到这里 你的LUA内核已经编译完了 可以开始学习LUA了

时间: 2024-08-04 02:28:27

在windows C++中编译并使用Lua脚本的相关文章

在windows C++中编译并使用Lua脚本1

早前就用过LUA ,只是局部的小项目使用,突然兴起想要写一些关于LUA 的  文章,记录曾经学习过的点点滴滴. 这里我使用的是LUA5.2作为 案例 lua做为轻量级脚本语言已经被广泛应用到应用软件以及游戏开发中,相比Perl以及python  lua的内核 只有100KB左右 可以很容易嵌入到语言级别 就好像语言本身的功能一样 以下来自百度全科: Lua还具有其它一些特性:同时支持面向过程(procedure-oriented)编程和函数式编程(functional programming):

在windows系统中使用backoff2005的测试脚本来测试分词结果

分词程序的测试一般用backoff2005的脚本,但是backoff2005脚本是运行在linux系统上的.如果在windows系统中时,怎么使用该脚本呢?假设用户已经有了icwb2-data压缩包了. 首先得安装perl开发环境.下载地址: https://dwimperl.googlecode.com/files/dwimperl-5.14.2.1-v7-32bit.exe接下来,需要安装diff工具,下载地址: http://superb-dca3.dl.sourceforge.net/p

Windows环境中编译opencv3.0同时加入OPENCV_contrib库及解决遇到相关问题

因为opencv3.0默认安装中没有加入SIFT.SURF等点特征检测,一百度下一跳,原来这玩意还弄了个其他的库,还只能在GitHub上才能弄到,这两天弄opencv3的contrib库,遇到了一些问题,为了让大家更好.更快用上contrib库,根据谷歌百度的几个问题,现分享给大家完整流程,也欢迎大家与我讨论其他opencv方面的问题. 一.下载安装准备 github  desktop 下载      windows 7or Later : https://desktop.github.com

在 Windows系统中编译node.js 源代码

Node.js 在 Windows 下只能通过 Microsoft Visual Studio 编译,因此你需要首先安装 Visual Studio 或者免费的 Visual Studio Express .你还需要安装 Python 2 ( 2.5 以上的版本,但要小于 3.0 ) ,可以在 http://python.org/ 取得.安装完 Python 以后请确保在 PATH 环境变量中添加 python.exe 所在的目录,如果没有则需要手动在“系统属性”中添加. 一切准备好以后,打开命

第二十三篇:在SOUI中使用LUA脚本开发界面

像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑.当需求变化时,只需要在服务端把相关代码调整一下,用户即可看到新的内容(界面). 传统的客户端程序开发流程和网页开发可能完全不同. 首先是界面的布局,在老式的界面布局过程中,程序员先在界面上放好各种控件,然后需要自己通过相应的代码来维护界面在不同状态下控件的显示状态及位置.当界面中元素很多时,单纯布局

Lua脚本编程:Lua语言入门

Lua是一门简单而强大的语言,其本身强大的扩展性使得这门语言在游戏设计等领域发挥着重要的作用.博主曾在Unity3D中使用过这门语言,并且针对Lua和Unity.C++等方面的内容进行了学习和讨论.最近因为在[游戏脚本高级编程]这本书中详细介绍了Lua脚本的相关内容,因此在这里记录下博主的读书心得,方便以后在需要的时候查阅. Lua系统构成 Lua系统由Lua链接库.Luac编译器.Lua解释器三部分构成. * Lua链接库主要由lua.lib和lua.h这两个文件组成.Lua链接库主要负责对自

Lua脚本之语法基础快速入门

要 1.基本数据类型 2.Lua中的常用语句结构以及函数 3.Lua中的常用语句结构介绍 4.Lua中的库函数 目录[-] 一.基本数据类型 二.Lua中的常用语句结构以及函数 1.Lua中的常用语句结构介绍 三.Lua中的库函数 Lua的语法基础超级简单,非常易于上手,下面总结一些学习过程中的Lua语法基础: 在开始学习之前,先介绍一些最基本的概念,在Lua中具有一个代码块的概念,每个函数或者for循环等都是一个代码块.在Lua中,用 “- - ”来标记该行的注释,使用“- - [ [” 和

online_jf.lua --累计在线时间领取物品(积分)的lua脚本

原作者: ayase 8-27修正 修复首次使用后的红字不需要额外进数据库导入计分表,这lua全自动生成 --------------------------------------------------------------惯例写在前面: 写这玩意其实学习性更大于目的性..= =研究了两天晚上写的我人参中滴第一个lua脚本,居然还真给我写出来了,好感动由于写代码的基础基本是零 所以碰了N+N次壁 什么函数字母大小写还要区分  -- 闹哪样啊喂 因为这个原因我试了半个多钟才发现问题所在什么函

Redis进阶应用:Redis+Lua脚本实现复合操作

一.引言 Redis是高性能的key-value数据库,在很大程度克服了memcached这类key/value存储的不足,在部分场景下,是对关系数据库的良好补充.得益于超高性能和丰富的数据结构,Redis已成为当前架构设计中的首选key-value存储系统. 虽然Redis官网上提供了200多个命令,但做程序设计时还是避免不了为了实现一小步业务逻辑而多次调用Redis的情况. 以compare and set场景为例.如果使用Redis原生命令,需要从Redis中获取这个key,然后提取其中的