C语言和Lua交互(七)

    xiaoxiao2021-03-25  107

    为Lua写一个C模块

    当用C函数扩展Lua时,最好就是将代码设计为一个C模块。

    直接上代码:

    #include <math.h> #include <stdio.h> #include <string.h> #include "lua.h" #include "lauxlib.h" #include "lualib.h" //待注册的C函数,和上一节相同 static int myadd(lua_State* L) { double op1 = luaL_checknumber(L,1); double op2 = luaL_checknumber(L,2); lua_pushnumber(L,op1 + op2); return 1; } static int mysin(lua_State *L){ double d = luaL_checknumber(L, 1); lua_pushnumber(L, sin(d)); return 1; } //luaL_Reg结构体 //最后一个元素的两个字段均为NULL,表示Lua注册函数已经到达数组的末尾。 static const struct luaL_Reg mylib[] = { {"myadd" , myadd},//第一个字段为字符串,在注册时用于通知Lua该函数的名字。 {"mysin" , mysin}, {NULL, NULL} }; //导出函数库 //函数名必须为luaopen_xxx,其中xxx表示library名称。Lua代码require "xxx"对应。 int luaopen_mylib(lua_State *L){ luaL_newlib(L, mylib); //luaL_register(L, "mylib",mylib); // lua 5.1 return 1; }

    编译代码,生成动态链接库(Linux的so,或Windows的DLL)

    gcc mylib.c -fPIC -shared -o mylib.so

    将包生成库文件,拷贝到Lua代码所在的当前目录,或者是LUA_CPATH环境变量所指向的目录,以便于Lua解析器可以正确定位到他们。

    在mylib.so同目录新增文件test.lua

    local mylib = require("mylib") local sin = mylib.mysin(2); local num = mylib.myadd(123,44) print(sin) print(num)

    运行lua代码

    lua test.lua
    转载请注明原文地址: https://ju.6miu.com/read-22681.html

    最新回复(0)