zoukankan      html  css  js  c++  java
  • Lua与C++相互调用

    {--1、环境--}

    为了快速入手,使用了小巧快速的vc++6.0编译器

    以及在官网下载了Lua安装包..官网地址{--http://10.21.210.18/seeyon/index.jsp--}

    两者都安装好后,即可进行

    {--2、工程以及配置--}

    1、首先用vc++6.0创建一个简单的win32 console application

    2、从Lua的安装目录下复制include和lib两个目录下的文件到刚刚创建的工程的目录下。

      {include:包含了lua的.h头文件}

      {lib:包含了lua的动态链接库dll}

    3、为了使vc++6.0编译和链接时能找到所需的Lua文件

       {在工程下添加刚刚复制过来的所有.h文件,保证编译通过}

       {在编译器里面设置dll{工程-设置-对象/库模块 那一行的最后添加 lua5.1.lib lua51.lib,保证链接时通过}}

    {--3、C++与Lua相互调用例子--}

     要调用Lua,首先我们得写一个简单的Lua文件,并把该文件保存到一个路径下,这里比如路径是{F:\Lua}

    function add(x, y)
        n1, n2 = clib();//关于clib()是一个C函数,稍后会介绍到。
        print("The first arg"..n1);
        print("The second arg"..n2);
        return x + y
    end

    该函数用于计算从C函数传递过来的的两个参数x,y的和。

    另外为了方便,这函数里面同时也演示了如何调用Lua如何调用C函数clib()

    接下来我们开始编写主函数

    #include<stdlib.h>
    
    // 这是个C++程序, 所以要extern "C",
    // 因为lua的头文件都是C格式的
    extern "C" {
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
    }
    
    lua_State* L; /* the Lua interpreter */
    
    //给lua调用的c函数必须定义成static int XXX(lua_State *L)  
    static int clib(lua_State *L)  
    {  
      lua_pushnumber(L, 100);
      lua_pushnumber(L, 200);
        return 2;   
      //lua调用该函数将从栈中,取2个结果 }
    //此处C++调用了Lua函数 int luaadd (int x, int y) { int sum; /* the function name */ lua_getglobal(L, "add");
    /* the first argument */ lua_pushnumber(L, x);
    /* the second argument */ lua_pushnumber(L, y);
    /* call the function with 2 arguments, return 1 result */ //说明调用的函数是带有2个参数和1个返回值 lua_call(L, 2, 1); /* get the result */ sum = (int)lua_tonumber(L, -1); lua_pop(L, 1); return sum; } int main(int argc, char* argv[]) { int sum; /* initialize Lua */ L = luaL_newstate();//创建一个指向lua解释器的指针 /* load Lua base libraries */ luaL_openlibs(L); lua_register(L, "clib", clib);
    /* load the script */ /*Lcc.lua是这个C++程序调用的Lua文件, 注意luaL_dofile()函数的第二个参数要写绝对路径,否则执行后会提示 “unprotected error in call to lua api(attampt to call a nil value)”错误 */ luaL_dofile(L, "F:\lua\Lcc.lua"); /* call the add function */ sum = luaadd(10, 15); /* print the result */ printf( "The sum is %d ", sum ); /* cleanup Lua */ lua_close(L); system("pause"); return 0; }

    以上的clib()函数就是Lua文件里面要调用的函数

    关键代码:lua_register(L, "clib", clib);将函数注册到Lua栈中,使得Lua可以调用到。

    而C++如何调用Lua

    关键代码:luaL_dofile()以及luaadd()函数

    -------------------------------------------------------------------------------------

                                        By Alwaystiys..

                                        From 2014.09.05

                                        At Gz.

  • 相关阅读:
    0099 数据类型转换 之 转为布尔:Boolean()
    0098 数据类型转换 之 转为数字: parseInt 、 parseFloat 、Number()、隐式转换
    0097 数据类型转换 之 转为字符串:toString()、String() 、加号拼接、隐式转换
    0096 获取变量数据类型typeof、字面量
    0095 布尔型Boolean,Undefined和 Null
    0094 字符串型 String
    0093 数字型 Number:整数、小数 、数字型进制、数字型范围、数字型三个特殊值、isNaN
    0092 数据类型、简单数据类型概述
    0091 交换两个变量的值( 实现思路:使用一个 临时变量 用来做中间存储 )
    SCSS 常用属性合集
  • 原文地址:https://www.cnblogs.com/MyGameAndYOU/p/3957776.html
Copyright © 2011-2022 走看看