如何从 Lua-lanes 调用 C 函数
2021-11-27 1:57:47
收藏:0
阅读:227
评论:2
我想使用 lanes 从 Lua 调用 C 函数。
int initApp(lua_State *L) {
lua_createtable(L, 0, 0);
lua_pushcfunction(L, get_appinfo);
lua_setfield(L, -2, "get_appinfo");
lua_setglobal(L, "App");
return 0;
}
local function thread1(n)
return App.get_appinfo(n)
end
function startlanes()
local lanes = require 'lanes'
package.preload['App'] = function() return App end
package.loaded['App'] = App
local app = require 'App'
print(app, app.get_appinfo) --table: 0x1234 function: 0x5678
--(1)
f = lanes.gen('*', {required = {'App'}}, thread1) --Lua Error: module 'App' not found: no field package.preload['App']...
--(2)
--f = lanes.gen('App', thread1) -- Bad library name: App
a = f(1)
sleep(1)
end
当我运行 (1) 时,我得到了 Lua 错误: 模块“ App”未找到:无字段 package.preload ['App'] ...无文件' / App.lua '...
。当我运行 (2) 时,我得到了“错误的库名称:App”。
如何使用 lanes 调用“App.get_appinfo()”?我可以将所有“App”函数移动到 package 中,但是它必须从内存而不是文件系统中加载。我嵌入了所有 Lua 包。
原文链接 https://stackoverflow.com/questions/70125903
点赞
stackoverflow用户1150448
要调用 C 函数,必须将一个函数作为 on_state_create
传递给 lanes.configure
。
//c 代码
int init_App(lua_State *L) {
lua_createtable(L, 0, 0);
lua_pushcfunction(L, get_appinfo);
lua_setfield(L, -2, "get_appinfo");
lua_setglobal(L, "App");
return 0;
}
int init(lua_State *L) {
lua_pushcfunction(L, init_App);
lua_setglobal(L, "init_App");
luaL_dostring(L, "local lanes = require 'lanes'.configure{on_state_create=init_App}; local l = lanes.linda()");
luaL_dostring(L, "startlanes()");
}
--lua 代码
local function thread1(n)
return App.get_appinfo(n)
end
function startlanes()
local lanes = require 'lanes'
local f = lanes.gen('*', thread1)
a = f(1)
sleep(1)
print(a[1])
end
2021-12-02 07:28:50
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
initApp
暴露给 Lua,比如_G.init_App
lua_pushcfunction(L, initApp); lua_setglobal(L, "init_App");
init_App
(作为第二个参数接收)- 它将创建你的库local function thread1(n, init_App) init_App() -- 在当前 Lane 中创建全局表 App return App.get_appinfo(n) end function startlanes() local lanes = require 'lanes' local f = lanes.gen('*', thread1) a = f(1, init_App) -- 将你的模块加载器作为参数传递 sleep(1) end