lua 与 c++ 的基本交互 1

版本是 lua5.1 vs 2013

转载自 http://blog.csdn.net/wangbin_jxust/article/details/37557807

一、打开vs2010

二、创建项目

新建项目->win32控制台应用程序->下一步->应用程序设置中选择静态库,不勾选预编译头->完成。具体如下图:

三、拷贝源码

将lua源码中的*.h文件拷贝到项目的头文件文件夹下,将lua源码中的*.c文件拷贝到项目的源文件文件夹下。

四、生成lua.lib

项目右键->生成。此时即可在项目的Debug文件夹下看到生成的 lua.lib了。

在前一篇文章中,我们已经讲了如何编译lua源码并生成lua.lib(请阅读 使用vs2010编译lua5.1源码生成lua.lib),在新的项目中,我们继续使用之前的项目来学习如何使用c++调用lua。如果有遇到unprotected error in call to Lua API错误,请参考本文最后的做法。

生成时可能 有一些安全警告错误

为了禁止一些安全警告(Windows程序员知道为什么),需要再修改配置属性->C/C++–>预处理器->预处理器定义,在末尾添加

;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE

一、创建项目

同样在该解决方案中,右键解决方案->添加项目->命名为testlua,选择win32控制台程序->不需要其他配置,选择完成。

二、配置项目

右键testlua项目->通用属性->框架和引用->添加新引用,指向lua项目。

右键testlua项目->配置属性->c/c++->常规->附加包含目录中,添加lua源码地址。

三、代码调用

[cpp] view plain copy

print?

  1. #include "stdafx.h"
  2. extern "C"
  3. {
  4. #include <lua.h>
  5. #include <lualib.h>
  6. #include <lauxlib.h>
  7. }
  8. int _tmain(int argc, _TCHAR* argv[])
  9. {
  10. lua_State *L = lua_open();
  11. luaL_openlibs(L);
  12. const char *buf = "print(‘Hello World‘)";
  13. luaL_dostring(L,buf);
  14. lua_close(L);
  15.   getchar(); //这句可以让你清楚的看到打印的 hello world
  16. return 0;
  17. }

五、创建lua文件

在当前cpp文件所在的目录下,创建一个test.lua文件,文件里写加上lua代码,这里我写的是 print("hello world  from lua file")

四、完成

直接运行,可以输出"hello world" 和 hello world  from lua file。

如果遇到 unprotected error in call to Lua API (unable to get ModuleFileName)错误,请修改两个项目的字符集,项目右键->配置属性->常规->字符集,这里将“使用unicode字符集”修改为"使用多字节字符集"。

时间: 2024-10-24 23:25:46

lua 与 c++ 的基本交互 1的相关文章

Lua和C语言的交互——C API

Lua可作为扩展性语言(Lua可以作为程序库用来扩展应用的功能),同时也是个可扩展的语言(Lua程序中可以注册由其他语言实现的函数). C和Lua交互的部分称为C API.C API是一个C代码与Lua进行交互的函数集.他由以下部分组成:读写Lua全局变量的函数.调用Lua函数的函数.运行Lua代码片断的函数.注册C函数然后可以在Lua中被调用的函数,等等. API中有些函数为了方便以宏的方式实现. 当在Lua和C之间交换数据时我们面临着两个问题:动态与静态类型系统的不匹配和自动与手动内存管理的

Lua和C之间的交互

转自:http://blog.csdn.net/sumoyu/article/details/2592693 (一) Lua 调C函数 什么样类型的函数可以被Lua调用   typedef int (*lua_CFunction) (lua_State *L); 符合类型的函数怎样处理后才可以被Lua调用 使用lua_register或者 lua_pushfunction和lua_setglobal()把要调用的函数加入到lua状态机中. #define lua_register(L,n,f)

Linux下C/C++和lua交互-Table

本来这些文章都是在我的个人网站www.zhangyi.studio,目前处在备案状态,暂时访问不了,所以搬到这边.  最近这两天需要弄清楚C++和lua间相互调用和数据传递,废话不多说,直接上过程. 首先是环境环境,Linux(Debian),安装lua,注意需要管理员权限. sudo apt-get install lua5.2 安装完后输入lua或者lua -v 严重是否安装成功以及安装的版本,当然,有了lua运行环境还不够我们还需要安装lua开发库既然我们安装的是lua5.2那么开发库同样

在C++使用LUA交互,LUA实现闭包,C++/LUA相互闭包

LUA可谓是配置文件神器,具体功能用过才知道,接近两年没用了抽了俩小时熟悉了下基本的用法. 包括C/LUA堆栈操作 函数相互调用 以及LUA的闭包 C++和LUA相互闭包 想要灵活使用LUA必须先要学习 LUA和C的堆栈交互模型 类似于汇编函数调用方式了 很有意思. 要学习LUA首先要理解LUA和C/C++交互的堆栈lua_State  这里引用网友的一篇文章很详细 http://wind-catalpa.blog.163.com/blog/static/11475354320131191031

Lua 跟 C++ 的交互

Lua 和 C++ 是这样交互的 乱七八糟的前戏: 1. 到官网下载 Lua 文件  可參考 ->  Lua 下载与配置 2. 设置环境  可參考  ->  VS 配置Lua环境 交互过程有: 1. C++ 訪问 Lua 的变量 2. C++ 调用 Lua 的函数 3. Lua 訪问 C++ 的变量 4. Lua 訪问 C++ 的函数 No code say a j8 C++ 调用 Lua #include <iostream> #include <string> //

lua与oc交互

//变成.mm文件,用于c++与oc交互; //    在.mm文件中可以实现c++与oc的混编,从而达到c++与oc的交互 //    c++与java的交互->lua(quick)与java的交互 //    luaj.callstaticmethod(“AppConTroller”,”ShowImagePicker”,{listener = callBack}) //    luaj 以及luaoc 都是放在luaBridge

Cocos2dx+lua合适还是Cocos2dx+js合适?

问题: 开发cocos2dx手游Cocos2dx+lua合适还是Cocos2dx+js合适 百牛信息技术bainiu.ltd整理发布于博客园 回答: 作者:廖宇雷链接:https://www.zhihu.com/question/21130385/answer/18485625来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 2014.02更新:请放心选择 Lua 吧.触控已经收购了 quick-cocos2d-x,2014年肯定会大力强化 cocos2d-x 的

【转】说下lua使用场景

[今日话题]说下lua使用场景 – flea 1. 我们有用,一些逻辑相对简单,没有复杂的数据交互,访问频次超高的接口实现,可以用lua,省得用phpfpm,太重,浪费资源. – 付坤 2. 也可以拿来扩展一下nginx的配置 – 花生 3. lua可以把软件的控制逻辑做成服务器动态配置 – 朝沐金风 4. lua写逻辑,c执行,这样假如服务端的逻辑一变,只需要更新lua脚本即可!我最近的一个项目是这么写的 – 马犇 5. lua还能直接导出字节码执行. 还能导成.o文件编译到nginx – 花

lua操作常用函数

(1)lua 和 C++之间的交互的基本知识: lua 和 C++ 之间的数据交互通过堆栈进行,栈中的数据通过索引值进行定位,(栈就像是一个容器一样,放进去的东西都要有标号)其中栈顶是-1,栈底是1,也就是第 1 个入栈的在栈底:也可以这么说:正数表示相对于栈底的位置(位移),负数表示相对于栈顶的位置(位移):(2)计算和清空栈中元素的操作:1.函数lua_gettop()用于返回栈中元素的个数,同时也是栈顶元素的索引,因为栈底是1,所以栈中有多少个元素,栈顶索引就是多少:呵呵2.函数lua_s