gpt4 book ai didi

c - 如何设置 "require"以从 Lua C API 返回表/模块?

转载 作者:太空狗 更新时间:2023-10-29 16:07:28 26 4
gpt4 key购买 nike

我想通过 C API 添加一个requireable 模块。

--lua.lua
local c_module = require("c_module")
c_module.doWork()

我必须使用哪些 API 函数才能实现这一点?

最佳答案

使用 require 加载共享库时, Lua 寻找一个名为 luaopen_<name> 的函数其中 <name>是用下划线替换点的模块名称(因此 require "foo.bar" 将查找 luaopen_foo_bar ,但连字符得到特殊处理;请参阅 Lua 手册)。

这个函数应该是一个常规的lua_CFunction ;也就是说,它需要一个 lua_State*作为参数并返回 int . require使用包名称作为参数调用此函数,您从函数返回的值是require。商店和返回。

这是一个名为 foo 的模块的示例:

static int bar(lua_State* L) {
// ...
}

int luaopen_foo(lua_State* L) {
lua_newtable(L); // Create package table

// Push and assign each function
lua_pushcfunction(L, &bar);
lua_setfield(L, -2, "bar");

// ...

// Return package table
return 1;
}

(这是针对 Lua 5.1 的,尽管 5.2 的等效代码即使不相同也应该非常相似。还要确保 luaopen_ 函数是从共享库中导出的。)

C 加载器的完整行为可以在这里找到:http://www.lua.org/manual/5.1/manual.html#pdf-package.loaders

关于c - 如何设置 "require"以从 Lua C API 返回表/模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23391821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com