C代码:
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
// C函数,将两个数字相加并返回结果
static int add(lua_State *L) {
double a = luaL_checknumber(L, 1); // 获取第一个参数
double b = luaL_checknumber(L, 2); // 获取第二个参数
double result = a + b;
// 将结果压入Lua栈
lua_pushnumber(L, result);
// 返回结果的数量
return 1;
}
// 注册C函数
static const struct luaL_Reg mylib[] = {
{"add", add}, // 在Lua中通过mylib.add调用C函数add
{NULL, NULL} // 结束标记
};
// Lua模块初始化函数
int luaopen_mylib(lua_State *L) {
// 注册模块
luaL_newlib(L, mylib);
return 1;
}
编译生成动态库:
使用以下命令编译生成动态库,例如mylib.so:
gcc -shared -fPIC -o mylib.so mylib.c -I/path/to/lua/include -L/path/to/lua/lib -llua
确保将/path/to/lua/include和/path/to/lua/lib替换为你实际的Lua头文件和库文件的路径。
Lua代码:
-- 载入C模块
local mylib = require("mylib")
-- 调用C函数add
local result = mylib.add(3, 4)
-- 打印结果
print("Result:", result)
在这个例子中,我们创建了一个C函数 add,它接受两个参数,将它们相加,并将结果推入Lua栈。然后我们使用 luaL_newlib 函数创建一个Lua模块,将C函数注册到模块中,并通过 luaopen_mylib 函数导出整个模块。
在Lua中,我们通过 require 载入这个C模块,并使用 mylib.add 调用C函数 add。
这只是一个简单的示例,实际上,你可以在C中实现更复杂的功能,并在Lua中调用。请注意,这个例子中使用的C API是适用于Lua 5.2版本的。如果你使用的是其他版本,可能需要略微调整。
转载请注明出处:http://www.zyzy.cn/article/detail/6522/Lua