zoukankan      html  css  js  c++  java
  • 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/        //这个口碑也不错呀~!各有所好~

                    

  • 相关阅读:
    读取INI配置文件
    在VB编程中,若一行代码太长需要换行时,行尾要加什么符号
    使用order by和group by的分析
    转 Sqlserver_left join 、right join、 inner join 用法
    Python 字典(Dictionary)操作详解
    转sql server新增、修改字段语句(整理)
    Winform TextBox中只能输入数字的几种常用方法(C#)
    数据库的范式,第一、二、三、四、五范式、BC范式
    【操作系统】银行家算法
    转 图解排序算法(三)之堆排序
  • 原文地址:https://www.cnblogs.com/dragonmoon/p/4060675.html
Copyright © 2011-2022 走看看