欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

lua 调用C

程序员文章站 2022-07-16 13:16:29
...

   Lua 下通过虚拟栈传递参数,只要注册相应接口便可调用C函数。

 

#include "lua.h"		// v5.1.5
#include "lualib.h"
#include "lauxlib.h"

// 原生函数
int ShowVal(const char *szReq, int &score);

// 包装函数
int GetScore(lua_State *env)
{
    int count = lua_gettop(env);
    if (count != 1)
    {
        lua_pushstring(env, "Param size not equal 3");
        lua_error(env);
        return -1;
    }

    // 参数出栈
    const char *szReq = luaL_checkstring(env, 1);

    // 原生接口
    int code = 0, score = 0;
    code = ShowVal(szReq, &score);

    // 结果入栈
    lua_pushnumber(env, code);
    lua_pushnumber(env, score);
    return 2;	// 入栈参数个数
}

static luaL_Reg luaLibs[] =
{
    {"luaGetScore", GetScore},
    {NULL, NULL}
};

// lua接口注册
int luaopen_cloudadapi(lua_State *env)
{
    const char *const LIBRARY_NAME = "cloudadapi";
    luaL_register(env, LIBRARY_NAME, luaLibs);

    return 1;
}

 

编译动态库 cloudadapi.so 

 

测试:

require "cloudadapi"

code, score = cloudadapi.luaGetScore('test')
print(string.format("code:%d score:%d", code, score))

 

 

相关标签: lua c