zoukankan      html  css  js  c++  java
  • C++调用Lua代码

    这里是指linux下的调用。C与C++调用Lua略有不同,体现在:

    1.头文件包含的方法

    C中直接include 

    1 #include <lua.h>
    2 #include <lualib.h>
    3 #include <lauxlib.h>

    c++中要加extern "C"

    1 extern "C"
    2 {
    3 #include <lua.h>
    4 #include <lualib.h>
    5 #include <lauxlib.h>
    6 }

    2.编译选项的不同

    gcc -o xxx xxx.c -llua -ldl -lm

    g++ -o xxx xxx.cpp -llua -ldl

    下面是一个简单的C++调用Lua代码方法示例

    lua代码(文件名为luafun.lua)

    1 function add(x)
    2     print('luafun,x=',x)
    3 end

    C++代码,这里注释部分说明了一些可替代的调用

     1 #include<iostream>
     2 using namespace std;
     3 
     4 extern "C"
     5 {
     6 #include"lua.h"
     7 #include"lauxlib.h"
     8 #include"lualib.h"
     9 }
    10 
    11 #define my_lua_dofile(L, filename) (luaL_loadfile((L), (filename)) || lua_pcall((L), 0, LUA_MULTRET, 0))
    12 
    13 lua_State *GlobalL;
    14 
    15 int main()
    16 {
    17     GlobalL = luaL_newstate();
    18     int x = 10;
    19 
    20     lua_gc(GlobalL, LUA_GCSTOP, 0);
    21     luaL_openlibs(GlobalL);
    22     lua_gc(GlobalL, LUA_GCRESTART, 0);
    23 
    24     //luaL_dofile(GlobalL, "luafun.lua");//执行lua文件
    25     
    26     int loaderr = luaL_loadfile(GlobalL, "luafun.lua");
    27     cout<<"loaderr="<<loaderr<<endl;
    28     lua_pcall(GlobalL, 0, LUA_MULTRET, 0);
    29     //my_lua_dofile(GlobalL, "luafun.lua");//代替上面三行
    30 
    31     lua_getfield(GlobalL, LUA_GLOBALSINDEX, "add");
    32     //lua_getglobal(GlobalL, "add");//代替上面一行
    33     
    34     lua_pushnumber(GlobalL, x);//参数
    35     int callerr = lua_pcall(GlobalL, 1, 0, 0);
    36     cout<<"callerr="<<callerr<<endl;
    37     cout<<lua_tostring(GlobalL, -1)<<endl;
    38 
    39     lua_close(GlobalL);
    40 }

    而实际上,直接这样用太过繁琐,因为要为每个lua函数单独写参数列表等内容,所以有不少人对此做了一些封装,可参考:http://blog.csdn.net/nightfallrove/article/details/5729636。另外g++编译的时候注意编译选项。

  • 相关阅读:
    MySQL的事务和视图
    MySQL中的常用函数
    高级查询(一)
    街道管理系统
    深入.NET平台和C#编程的错题
    appium python下的API方法
    Charles 使用教程
    appium,iOS下,ios_predicate等定位方式
    Linux -常用命令
    python-列表以及相关函数认识
  • 原文地址:https://www.cnblogs.com/njucslzh/p/2737230.html
Copyright © 2011-2022 走看看