编写C模块供Lua使用

11 篇文章 0 订阅

在Lua的源码linit.c中增加如下代码

static int showRlt1(lua_State* L);
static int showRlt2(lua_State* L);

    // 另一种注册方式
    static const luaL_Reg mylibs[] = {
        {"showRlt1",showRlt1},
        {"showRlt2",showRlt2},
        {NULL,NULL}
    };

int showRlt1(lua_State* L){
    lua_pushstring(L, "c function showRlt1");
    return 1;
}

int showRlt2(lua_State* L){
    const char* value = luaL_checkstring(L, -1);
    lua_pushstring(L, value);
    return 1;
}

int luaopen_mylib(lua_State* L){

    luaL_newlib(L, mylibs);

    return 1;
}

/*
** these libs are loaded by lua.c and are readily available to any Lua
** program
*/
static const luaL_Reg loadedlibs[] = {
  {"_G", luaopen_base},
  {LUA_LOADLIBNAME, luaopen_package},
  {LUA_COLIBNAME, luaopen_coroutine},
  {LUA_TABLIBNAME, luaopen_table},
  {LUA_IOLIBNAME, luaopen_io},
  {LUA_OSLIBNAME, luaopen_os},
  {LUA_STRLIBNAME, luaopen_string},
  {LUA_BITLIBNAME, luaopen_bit32},
  {LUA_MATHLIBNAME, luaopen_math},
  {LUA_DBLIBNAME, luaopen_debug},
    {"mylib",luaopen_mylib},
  {NULL, NULL}
};

即可在Lua中使用showRlt1和showRlt2两个C函数

//
//  main.cpp
//  LuaAndCpp
//
//  Created by Forest on 16/6/27.
//  Copyright (c) 2016年 lin. All rights reserved.
//
#include <iostream>

#include "lua.hpp"

int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";

    lua_State* m_luaState = luaL_newstate();

    luaL_openlibs(m_luaState);

    luaL_dofile(m_luaState, "/Users/Forest/Documents/LuaAndCpp/LuaAndCpp/scripts/config.lua");

    lua_close(m_luaState);

    return 0;
}

config.lua

local mylib = require('mylib')

print('---->>',mylib)

print('---->>',mylib.showRlt1())

print('---->>',mylib.showRlt2('APPLE'))

运行结果:

Hello, World!
---->>  table: 0x100306260
---->>  c function showRlt1
---->>  APPLE
Program ended with exit code: 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值