Lua初学者(三)--Lua 嵌入宿主语言(C++/C)

继续上节内容,在C中使用Lua,这个网上资源也比较多了,不过我这里也提下哈,毕竟自己过一遍还是很有好处的。

环境:Lua5.1,vs2013中文版

----------------------------------------------------一、C++中配置 lua----------------------------------------

1.下载lua源码么:http://www.lua.org/download.html

就OK了

2.打开VS2013,新建工程: 新建-->项目==》Win32控制台应用程序(起名:lua5.1)-->下一步-->①.选择:静态库;②.取消:预编译头-->完成

3.添加Lua的资源文件,生成静态库。

①.项目-->添加现有项(Shift+Alt+A);

②.选择 lua-5.2.3.tar.gz  
最终解压包下 Src 目录下全部文件,点击 -->添加

(添加后会出现 三角)

4.完成后编译即可。

最终生成文件:

如果是 Release 模式下编译:(解决方案目录)/Release/lua.lib

若在   Debug模式下编译:     (解决方案目录)/Debug/lua.lib

提示:会遇到的错误

1. 错误 1 error C4996: ‘sprintf‘: This function or variable may be unsafe. Cons

方法一:手工将原来的旧函数替换成新的Security CRT functions。

方法二:屏蔽这个警告。

在预编译头文件stdafx.h里(注意:一定要在没有include任何头文件之前)定义下面的宏:

#define _CRT_SECURE_NO_DEPRECATE

或者#param warning(disable:4996)

方法二没有使用新的更安全的CRT函数,显然不是一个值得推荐的方法,可是你又不想一个一个地改。

那么还有一个更方便的方法:

在预编译头文件stdafx.h里(同样要在没有include任何头文件之前)定义下面的宏:

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

在链接的时候便会自动将旧函数替换成Security CRT functions。

注意:这个方法虽然使用了新的函数,但是不能消除警告你还得同时使用方法二。。。

详细解释:http://blog.csdn.net/popppig/article/details/8571075

----------------------------------------------------二、C++中如何调用 lua----------------------------------------

1.新建项目:

新建-->项目==》Win32控制台应用程序(起名:Luatest)-->下一步--> 完成 (完成即可)

2.设置属性:

项目-->属性==》 配置属性下:

①.VC++目录-->应用目录

在这里添加 上面 Lua5.1 工程生成的lib文件的文件目录,绝对路径就可以了。(懒人操作)

②.C/C++  -->常规 -->附加包含目录

这里添加  lua-5.2.3.tar.gz  
最终解压包下 Src 的目录

③.C/C++  -->高级

选择 编译为C代码

3.设置完毕了,可以撸代码了:

先看看 lua.hpp,以后引用这个文件就OK,不必写下面那么多东西了

<span style="font-family:Arial;font-size:18px;">// lua.hpp
// Lua header files for C++
// <<extern "C">> not supplied automatically because Lua also compiles as C++

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
</span>

test.lua 文件内容:

<span style="font-family:Arial;font-size:18px;">print "The test.lua has open !"
print "hello world !"
print "文件加载完毕 !"

test = "我是 test 变量!"
</span>

这里要是正文了,咱们的Cpp文件:

/**
* 函数名:Func
* 作者:猪猪侠
* 日期:2014年11月12日	20:46:21
**/

// Luatest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include "lua.hpp"
/**
* 等价于:
* extern "C" {
* #include "lua.h"
* #include "lualib.h"
* #include "lauxlib.h"
* }
**/

int _tmain(int argc, _TCHAR* argv[])
{
	//新建虚拟机
	lua_State *L = luaL_newstate();

	//载入库
	luaL_openlibs(L);

	//这里直接在C++里执行下  lua 代码
	const char *buf = "print('Hello World')";
	luaL_dostring(L, buf);

	//这里执行 test.lua  Lua文件
	luaL_dofile(L, "test.lua");

	//获取 返回结果
	lua_getglobal(L,"test");
	printf("\n%s\n", lua_tostring(L, -1));

	//一定记得关闭虚拟机
	lua_close(L);

	system("pause");
	return 0;
}

4.编译运行一下,

不是咱们的效果,因为没有执行 test.lua文件内容,

打开Debug文件夹,这里执行下:

OK! 我就不用解释了吧。

直接把 Luatest.exe 和test.lua 复制到任何地方,双击可以运行了,也就是说,不需要在使用Lua的动态库了。

(完)

时间: 2024-08-05 02:48:50

Lua初学者(三)--Lua 嵌入宿主语言(C++/C)的相关文章

Lua初学者(一)--Lua 简单教学

</pre></p><p><span style="font-family: 'Courier New'; font-size: 18px;">最近由于工作原因,暂时木有<<a target=_blank href="http://blog.csdn.net/zhuzhuyule/article/details/40404473" style="color: rgb(0, 0, 0); text-

lua视频教程三套高清新

1. 下载地址 2. 某网校 Lua 经典教程 3. lua脚本语言零基础开发教程19课全 4. LUA完整视频+Cocos2d-x项目实战 1. 下载地址 https://www.cnblogs.com/coco56/p/11223189.html 在视频教程\Lua\lua视频三套高清新那里. 2. 某网校 Lua 经典教程 01第一课程安排 02第二课.HelloLua 03第三课.开始 04第四课.类型与值 05第五课.表达式 06第六课.语句 07第七课.语句 08第八课.函数 09第

lua脚本之lua语言简介以及lua的安装

本博主不擅于进行文字创作,所以,相当一部分文字皆复制于其他博文.还希望能够得到谅解.  一.Lua语言简介 Lua是一个免费的开源软件,可以免费用于科研及商业.Lua具有一个专家团队在维护和升级,其设计旨在项目中扩展功能,因此其内核小而稳定.在游戏开发中,Lua在用户界面.游戏数据管理.实时游戏事件管理.游戏人工智能.创建功能原型等方面具有强大的支持.Lua不能直接访问数据库,但可以通过整合其他语言组件来访问数据库:对于一些耗时要求更高效率的工作,一般交给更加底层的语言去完成,Lua只是起到整合

Lua 架构 The Lua Architecture

转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间翻译了lua官方关于lua5架构设计的一份文档,现在分享给大家. 注意:所有版权都归lua官方所有,本人仅将其翻译为中文,以方便中文阅读者.翻译中出现任何错误导致的结果,本人不负任何责任. 如果有任何翻译错误,以及意见与建议,请email本人.邮件地址:[email protected]. 转载请注

lua编程之lua与C相互调用

lua是扩展性非常良好的语言,虽然核心非常精简,但是用户可以依靠lua库来实现大部分工作.除此之外,lua还可以通过与C函数相互调用来扩展程序功能.在C中嵌入lua脚本既可以让用户在不重新编译代码的情况下修改lua代码更新程序,也可以给用户提供一个自由定制的接口,这种方法遵循了机制与策略分离的原则.在lua中调用C函数可以提高程序的运行效率.lua与C的相互调用在工程中相当实用,本文就来讲解lua与C相互调用的方法. Lua与C相互调用的首要问题是如何交换数据,lua API使用了一个抽象的栈与

VC和VS调用Lua设置以及Lua C API使用。

通过c++调用lua 脚本,    环境VC++6.0    lua  sdk 5.1.4 在调用前先认识几个函数.1.调用lua_open()将创建一个指向Lua解释器的指针.2. luaL_openlibs()函数加载Lua库.3.使用luaL_dofile()加载脚本并运行脚本.4. lua_close()来关闭Lua指向解释器的指针. 5.调用lua_getglobal()将add()函数压入栈顶,add()为lua函数.6.第一个参数x,通过调用lua_pushnumber()入栈.7

vJine 第三波 之 Lua 来袭 vJine.Lua

vJine.Lua vJine.Lua是Lua语言的C#封装库,可实现通过C#直接运行Lua脚本并与Lua脚本交互的功能. 1. 授权: MPL2.0 相关资源: nuget:(https://www.nuget.org/packages?q=vjine) API文档:(http://git.oschina.net/vjine/vJine.Lua/attach_files) Lua官网:(http://www.lua.org) Lua中国开发者:(http://www.luaer.cn) bab

[转载] 详述三种现代JVM语言--Groovy,Scala和Clojure

转载自http://www.tuicool.com/articles/jYzuAv和http://www.importnew.com/1537.html 在我与Martin Fowler曾经合作呈现的一次主题演讲中,他作出了一个有洞察性的观点: Java的遗产将是平台,而不是程序设计语言. Java技术的原始工程师们作出了一个明智的决定,就是将编程语言与运行时环境分开,最终这使得超过200种语言能够运行在Java平台上.这种架构对于该平台的长期活力是至关重要的,因为计算机程序设计语言的寿命一般都

WCF入门教程三[WCF的宿主]

一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定义,可以直接看到运行的效果.此项目模板基于IIS托管的程序,如本系列的第一节所示.在开发基于IIS托管的WCF服务程序时,比较多见,自学的时候也可以使用这种类型,简单易懂. WCF服务库,可以认为是一个包含WCF服务以及契约定义的类库.不能直接运行,你可以在其他项目里引用,在宿主里启用托管这个库,有