亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

C語言模塊回調Lua函數的兩種方法

2024-07-21 23:04:32
字體:
來源:轉載
供稿:網友

lua和C通過虛擬棧這種交互方式簡單而又可靠,缺點就是C做棧平衡稍微會多寫一點代碼。 今天分享學到的C模塊回調Lua函數的兩種方法,都是炒冷飯,大俠勿噴。

1. C保存函數對象

C模塊可以通過注冊表保存Lua里面的對象,等適當時候取出再調用即可。

復制代碼 代碼如下:

static int lua_callback = LUA_REFNIL;

 

static int setnotify(lua_State *L)
{
  lua_callback = luaL_ref(L, LUA_REGISTRYINDEX);
  return 0;
}

static int testnotify(lua_State *L)
{
  lua_rawgeti(L, LUA_REGISTRYINDEX, lua_callback);
  lua_call(L, 0, 0);
}


luaL_ref把棧頂的值取出,放到指定的tabel中,然后返回一個索引(目測是數組的index)。 lua_rawgeti把之前保存的function對象取出,再由lua_call調用。
復制代碼 代碼如下:

function callback(  )
    print "Callback"
end

 

cb.setnotify(callback)
cb.testnotify()


2. C訪問Lua全局環境
第二種方法更簡便,C直接調用Lua中的函數,就像Lua調用C一樣
復制代碼 代碼如下:

static int testenv(lua_State *L)
{
  lua_getglobal(L, "defcallback");
  lua_call(L, 0, 0);
}

該方法的缺點就是如果C模塊獨立編寫,方法名就不太靈活。 用這種方法一般會在Lua端再封裝一層,以隔離全局環境。

 

3. 完整例子
cb.c

復制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

 

static int lua_callback = LUA_REFNIL;

static int setnotify(lua_State *L)
{
  lua_callback = luaL_ref(L, LUA_REGISTRYINDEX);
  return 0;
}

static int testnotify(lua_State *L)
{
  lua_rawgeti(L, LUA_REGISTRYINDEX, lua_callback);
  lua_call(L, 0, 0);
}

static int testenv(lua_State *L)
{
  lua_getglobal(L, "defcallback");
  lua_call(L, 0, 0);
}

static const luaL_Reg cblib[] = {
  {"setnotify", setnotify},
  {"testnotify", testnotify},
  {"testenv", testenv},
  {NULL, NULL}
};

int luaopen_cb(lua_State *L)
{
  luaL_register(L, "cb", cblib);
  return 1;
}


test.lua
復制代碼 代碼如下:

require("cb")

 

function callback(  )
  print "Callback"
end

function defcallback()
  print "Predef callback"
end

cb.setnotify(callback)
cb.testnotify()
print "Done"
cb.testenv()

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品国产精品大乳美女| 亚洲三级av在线| 91成人精品网站| 亚洲人免费视频| 久久久精品在线观看| 久久99青青精品免费观看| 国产一区二区三区在线观看视频| 久久精品久久久久久| 亚洲r级在线观看| 久久99热这里只有精品国产| 亚洲一区二区三区在线视频| 亚洲福利在线播放| 97碰碰碰免费色视频| 性色av一区二区三区在线观看| 色系列之999| 亚洲欧美一区二区三区在线| 国产精品免费一区二区三区都可以| 在线播放亚洲激情| 一区二区三区亚洲| 久热精品视频在线免费观看| 久久久99久久精品女同性| 欧美极品少妇xxxxⅹ喷水| 欧美日韩国产一区二区三区| 亚洲一区二区自拍| 亚洲成年人在线| 成人国内精品久久久久一区| 国产有码在线一区二区视频| 成人黄色片在线| 久久手机精品视频| 91亚洲精品在线观看| 亚洲精品久久久一区二区三区| 欧美一级大片视频| 日韩成人网免费视频| 青青草原成人在线视频| 91精品久久久久久久久久久久久久| 亚洲最大的网站| 在线国产精品播放| 成人在线播放av| 日韩精品丝袜在线| 欧美日韩精品国产| 国产成人久久久精品一区| 久久久久久久久久久亚洲| 日本成人免费在线| 成人伊人精品色xxxx视频| 欧美日产国产成人免费图片| 91地址最新发布| 久久久久久久91| 中文字幕无线精品亚洲乱码一区| 亚洲xxxx做受欧美| 欧美猛交免费看| 亚洲激情自拍图| 91wwwcom在线观看| 日韩精品免费在线视频观看| 久久久精品在线观看| 国产97在线视频| 在线中文字幕日韩| 国产精品久在线观看| 国产成人精品亚洲精品| 亚洲精品成人久久| 久久久久国色av免费观看性色| 91av中文字幕| 国产这里只有精品| 色琪琪综合男人的天堂aⅴ视频| 色哟哟网站入口亚洲精品| 欧美丝袜一区二区三区| 亚洲欧美日韩中文视频| 中文字幕日韩精品在线观看| 国产精品第一视频| 日韩成人av在线播放| 欧美精品18videosex性欧美| 国产精品黄色av| 欧美电影免费在线观看| 亚洲一二三在线| 欧美网站在线观看| 欧美野外wwwxxx| 亚洲三级黄色在线观看| 欧美在线视频一区二区| 国产精品久久久久久超碰| 久久久亚洲天堂| 欧美日韩高清在线观看| 久久精品久久久久| 国产福利视频一区| 亚洲精品成人久久电影| 国产成人综合精品| 国产精品久久久久91| 久热精品视频在线免费观看| 国产精品jizz在线观看麻豆| 精品国产欧美成人夜夜嗨| 久久久女女女女999久久| 一区二区三区在线播放欧美| 国产午夜精品久久久| 性色av一区二区咪爱| 久久国产精品亚洲| 久久久久国产视频| 亚洲精品99久久久久| 91精品久久久久| 中文字幕精品在线视频| 日韩高清电影免费观看完整| 精品五月天久久| 久久精品国亚洲| 国产日韩专区在线| 97在线观看免费| 精品国内自产拍在线观看| 欧美猛少妇色xxxxx| 国产精品第一视频| 国产日本欧美一区二区三区在线| 国产丝袜一区视频在线观看| 久久久久久这里只有精品| 国产精品久久久久久av福利软件| 欧美日韩在线第一页| 久久免费视频网| 黑人巨大精品欧美一区免费视频| 欧美日韩在线视频一区二区| 欧美日韩另类字幕中文| 久久久精品久久久| 91色视频在线观看| 黑人巨大精品欧美一区二区免费| 91成品人片a无限观看| 美日韩精品免费视频| 欧美疯狂xxxx大交乱88av| 欧美超级乱淫片喷水| 欧洲成人免费aa| 亚洲美女动态图120秒| 国产91精品黑色丝袜高跟鞋| 久久久最新网址| 国产亚洲精品va在线观看| 欧美成人剧情片在线观看| 国产精品久久一| 精品福利樱桃av导航| 亚洲欧洲国产伦综合| 最近2019中文字幕在线高清| 成人亲热视频网站| 伊人久久男人天堂| 欧美制服第一页| 日韩成人小视频| 精品国产91久久久久久老师| 亚洲精品日韩激情在线电影| 久久精品色欧美aⅴ一区二区| 久久精品国产清自在天天线| 国产精品美女午夜av| 亚洲欧美一区二区三区四区| 亚洲欧美制服另类日韩| 久久久国产精彩视频美女艺术照福利| 欧美疯狂性受xxxxx另类| 国产精品久久久久久久一区探花| 狠狠躁18三区二区一区| 久久久久久久久久久久久久久久久久av| 韩国19禁主播vip福利视频| 成人网址在线观看| 国产精品成人av在线| 久久久久久久久中文字幕| 亚洲成色777777女色窝| 日本91av在线播放| 最好看的2019年中文视频| 亚洲激情小视频| 午夜精品久久久久久久男人的天堂| 欧美一区二区大胆人体摄影专业网站| 欧洲日韩成人av| 久久视频在线视频| 国产日本欧美一区二区三区| 欧美精品在线视频观看| 91老司机精品视频| 亚洲最大av网站| 亚洲a在线播放|