lua与c++的相互调用入门篇

进入游戏行业,开始学习lua,lua脚本语言的优势在于灵活,游戏行业应用相当广泛,因为支持动态加载,所以是必不可少的存在。可以想想,如果死守C++不放,有一个bug,莫非修正bug后重启服务器?这得浪费多少时间?

好了,废话少说,上流程。

1:下载lua源码:http://www.lua.org/ftp/

2:建立控制台应用程序,选择“静态库”,去掉“预编译头”选项

3:将下载的lua源码 添加到工程,如下图

4:选择Release 模式

5:为了防止4996错误,在“预处理器”中加入 “_CRT_SECURE_NO_WARNINGS”

6:好了,编译生成.

源码编译工作到这里就结束了,进入第二步

二:

1:新建控制台应用程序,包含源码目录,为了方便以后应用,将lib文件改名“lua.lib",源码文件放入单一文件夹;

2:在工程属性中"附加包含目录“包含lua源码目录,博主这里放在C盘。

3:"附加依赖项" 包含 lib,记得放置在当前工作目录下,别忘记了。(提醒自学编程的同学)

三:开始最后一步,堆代码啦。。

C++代码如下:

#include "stdafx.h"
#include <iostream>
extern "C"
{
#include <lua.h>
 #include <lualib.h>
 #include <lauxlib.h>
}

lua_State *L;

static int frist_lua(lua_State * L)
{
  int num =lua_tonumber(L,1);
  std::cout<<num<<std::endl;
  lua_pushstring(L,"Hello Lua");
return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
    L= luaL_newstate();   //注册一个状态机
    luaL_openlibs(L);    //加载lua库

    lua_register(L,"frist_lua",frist_lua);
    luaL_dofile(L,"C:\\hellolua.lua");   //加载lua脚本
    lua_close(L);   //释放虚拟机
    getchar();
    return 0;
}

lua代码:

local hello = frist_lua(1)
print(hello)

运行结果:

最后提醒下,真正的应用lua与c++交互 还有很多第三方插件,这里推介几款:

lua tinker(lua5.0开发出来的插件,据说是韩国人,随着更新5.1还能用,5.2就不能用了网上流传作者不知道去哪里了,好在广大的程序猴们自己动手丰衣足食,5.2改动了下可以用了,下载地址如下,包含lib和库即可,http://download.csdn.net/download/kingsollyu/6888211)  博主就用的这个,比较不错。

tolua++
使用MIT license。下载地址:http://www.codenix.com/~tolua/        //这个口碑也不错呀~!各有所好~

时间: 2024-12-28 20:19:48

lua与c++的相互调用入门篇的相关文章

Lua与C的相互调用

闲的蛋疼,让C和Lua玩包剪锤.结果C以微弱的优势胜出了. 言归正传,这次主要是想练习Lua和C的相互调用. 一.C调用Lua函数 1. luaL_dofile(L, fn); 该函数可以让Lua虚拟栈读取路径为fn的Lua文件,其实质是: lua_loadfile(L, fn) || lua_pcall(L, 0, Lua_MUTIRET, 0) 实际上,lua_loadfile只是把Lua文件加载到VM,成为一个可执行的对象,但却还没有执行它,所以还不能使用. 而lua_pcall则把该Lu

lua与c++的相互调用

一.   lua调用C++       在lua中是以函数指针的形式调用函数, 并且所有的函数指针都必须满足如下此种类型: typedef int (*lua_CFunction) (lua_State *L); 也就是说, 偶们在C++中定义函数时必须以lua_State为参数, 以int为返回值才能被Lua所调用. 但是不要忘记了, 偶们的lua_State是支持栈的, 所以通过栈可以传递无穷个参数, 大小只受内存大小限制. 而返回的int值也只是指返回值的个数真正的返回值都存储在lua_S

TS与JAVA相互调用(TS篇)

一 : TS调用JAVA window["WebViewJavascriptBridge"].callHandler( 'enterGame' , JSON.stringify($param) , function(responseData) { // document.getElementById("show").innerHTML = "send get responseData from java, data = " + responseD

C程序与Lua脚本相互调用

Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows环境下Lua的下载以及安装注意事项:2.Visual C++6.0中Lua的配置:3.C程序与Lua脚本相互调用实例. 1.Windows环境下Lua的下载以及安装注意事项 a.下载Lua for Windows,笔者用的版本是V5.1.4-35: b.上微软官网,下载Visual C++运行库——vcred

lua编程之lua与C相互调用

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

菜鸟入门之lua与c++相互调用(包含多个demo)

前两篇文章中,已经介绍了使用vs2010编译lua5.1源码生成lua.lib 和 vs项目中使用c++调用lua,可以保证demo在vs上运行起来了.这里再详细介绍下c++和lua之间的相互调用以及原理. c++与lua直接的调用,实际上通过一个栈结构来传递数据,该栈结构栈顶的索引值为-1,向栈底方向索引值依次为-1 ,-2......栈顶索引为1.栈结构里可以放函数,表,字符串,整形等各种lua的基本数据. 一.在当前cpp目录下创建test.lua文件,用于与c++交互调用,代码如下: p

uLua学习笔记(三):Unity3D和Lua之间的相互调用

这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下: 先赞一个! Unity3D调用Lua Unity3D调用Lua的方法还是比较简单的,所以先说这个,由于这部分在学习笔记(一)中已经说的挺多的了,更多的内容点击这里回去看,所以这里我们就来看一个简单的示例即可: 1 using LuaInterface; 2 using UnityEngine; 3 4 public class UnityCallLua : Mon

lua和C++相互调用

从lua调用C++函数和对象,利用LuaPlus可以方便的从C++中调用lua脚本,反过也一样.通过注册函数或类对象,lua便可以访问C++. 一.C风格函数注册    Lua提供了C风格的回调函数注册,该函数原型如下: int Callback(LuaState* state); 无论是全局函数.类非虚函数.类虚函数,只要符合上面的原型,都可以向Lua注册.我们以全局函数为例,下面是我们提供的一个回调函数CStyleAddFunc: int CStyleAddFunc(LuaState * s

Cocos2d-x3.0下 Lua与C++相互调用

这里讲下Lua与C++之间如何实现相互调用 原文连接:http://blog.csdn.net/qqmcy/article/details/26052771 DJLCData.h 实现类 // // DJLCData.h // uitestLua // // Created by 杜甲 on 14-5-17. // // #ifndef __uitestLua__DJLCData__ #define __uitestLua__DJLCData__ #include "cocos2d.h"