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

首頁 > 開發 > 綜合 > 正文

Lua中調用C語言函數實例

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

在上一篇文章(C調用lua函數)中,講述了如何用c語言調用lua函數,通常,A語言能調用B語言,反過來也是成立的。正如Java與c語言之間使用JNI來互調,Lua與C也可以互調。

當lua調用c函數時,使用了和c調用lua中的同一種棧,c函數從棧中得到函數,然后將結果壓入棧中。為了區分返回結果和棧中的其他值,每一個函數返回結果的個數。
這里有個重要的概念:這個棧不是全局的結構,每個函數都有自己的私有局部棧。哪怕c函數調用了lua代碼,lua代碼再次調用該c函數,他們有各自獨立的局部棧。第一個參數的索引是1。
作為第一個例子,讓我們看看如何實現一個簡單的函數,返回給定2個參數的和:

復制代碼 代碼如下:

static int l_plus(lua_State* L)
{
     lua_Integer a = lua_tointeger(L, 1);
     lua_Integer b = lua_tointeger(L, 2);
     lua_pushinteger(L, a+b);
     return 1;
}

每一個Lua注冊的函數都必須是這個原型,它已經在lua.h中定義了:
復制代碼 代碼如下:

typedef int (*lua_CFunction) (lua_State *L);

由于c函數返回了一個int類型的返回值個數。因此,當壓入返回值之前,不必要清理棧,lua會自動移除返回值下面的任何數據。

 

在lua中使用該函數之前,我們需要注冊它。使用lua_pushcfunction,它接受一個c函數,然后在lua內部創建一個函數類型的值來表示該函數。

復制代碼 代碼如下:

lua_pushcfunction(L, lua_plus);
lua_setglobal(L, "myplus");

一個專業點的寫法是,我們必須檢查它的參數類型:
復制代碼 代碼如下:

static int l_plus(lua_State* L)
{
     lua_Integer a = luaL_checkinteger(L, 1);
     lua_Integer b = luaL_checkinteger(L, 2);
     lua_pushinteger(L, a+b);
     return 1;
}

完整代碼:
復制代碼 代碼如下:

#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
static int l_plus(lua_State* L)
{
     lua_Integer a = luaL_checkinteger(L, 1);
     lua_Integer b = luaL_checkinteger(L, 2);
     lua_pushinteger(L, a+b);
     return 1;
}

 

int main()
{
     lua_State *L = luaL_newstate();
     luaL_openlibs(L);
     lua_pushcfunction(L, l_plus);
     lua_setglobal(L, "myplus");
     if (luaL_dostring(L, "print(myplus(2,2))")) {
          lua_close(L);
          error("Failed to invoke");
     }
     lua_close(L);
     return 0;
}


(完)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久影视三级福利片| 伊人伊成久久人综合网小说| 久热精品视频在线观看一区| 亚洲第一网中文字幕| 亚洲精品电影网| 欧美性xxxx极品hd满灌| 中文精品99久久国产香蕉| 国产成人精品免费视频| 韩国三级电影久久久久久| 国产日韩中文在线| 日韩va亚洲va欧洲va国产| 欧美在线免费观看| 免费99精品国产自在在线| 中文字幕欧美日韩在线| 欧美精品18videosex性欧美| 国产噜噜噜噜久久久久久久久| 午夜精品三级视频福利| 国产精品第七十二页| 久久精品99无色码中文字幕| 97色在线观看| 亚洲国产精品成人精品| 国产精品永久在线| 国产精自产拍久久久久久| 亚洲跨种族黑人xxx| 国产精品中文字幕在线观看| 在线观看日韩www视频免费| 国内精品400部情侣激情| 中文字幕亚洲综合久久筱田步美| 国产精品露脸自拍| 久久久久久久一区二区三区| 亚洲a级在线播放观看| 国内外成人免费激情在线视频网站| 久久精品视频99| 狠狠操狠狠色综合网| 久久国产精品久久久久久| 一区二区福利视频| 欧美激情xxxxx| 国产脚交av在线一区二区| 国模gogo一区二区大胆私拍| 欧美激情第一页xxx| 国产精品美女无圣光视频| 亚洲最大激情中文字幕| 这里只有精品久久| 国内精品中文字幕| 国产精品久久久久99| 国产一区视频在线播放| 欧美亚洲视频在线看网址| 亚洲精品久久久久中文字幕二区| 国产激情综合五月久久| 亚洲天堂网站在线观看视频| 97国产精品视频人人做人人爱| 国产97色在线| 日韩专区在线观看| 欧美激情一级精品国产| 日韩高清欧美高清| 久久国产精品久久久久久| 国产99视频精品免视看7| 亚洲激情小视频| 4438全国亚洲精品在线观看视频| 久久久精品电影| 国产精品大片wwwwww| 亚洲精品二三区| 亚洲va欧美va国产综合久久| 96国产粉嫩美女| 亚州欧美日韩中文视频| 中日韩午夜理伦电影免费| 国产91免费观看| 午夜精品久久久久久久男人的天堂| 亚洲精品日韩av| 久久成人精品视频| 国内精品美女av在线播放| 欧美性受xxxx黑人猛交| 在线丨暗呦小u女国产精品| 亚洲高清福利视频| 国产精品自产拍在线观看中文| 国产精品丝袜高跟| 人人澡人人澡人人看欧美| 日韩中文字幕视频在线观看| 日韩高清电影免费观看完整版| 狠狠色狠色综合曰曰| 亚洲国产中文字幕久久网| 成人免费福利在线| 国产午夜精品理论片a级探花| 久久视频在线视频| 日韩av男人的天堂| 精品自在线视频| 欧美性69xxxx肥| 亚洲电影成人av99爱色| 国产一区二区三区在线观看视频| 国产精品青草久久久久福利99| 久久久91精品| 精品视频偷偷看在线观看| 亚洲第一网站男人都懂| 成人免费淫片aa视频免费| 国产精品福利无圣光在线一区| 亚洲aaa激情| 欧美xxxx14xxxxx性爽| 欧美色视频日本版| 丝袜情趣国产精品| 97国产精品视频| 国产精品女人久久久久久| 欧美性xxxxhd| 日韩成人在线免费观看| 国产精品久久久久免费a∨| 日本精品一区二区三区在线播放视频| 久久久久久久成人| 7m精品福利视频导航| 69av在线视频| 欧美黑人巨大精品一区二区| 日韩精品久久久久久福利| 黄色成人在线播放| 97超级碰碰碰| 韩剧1988免费观看全集| 亚洲精品一区二区网址| 欧美大肥婆大肥bbbbb| 狠狠色香婷婷久久亚洲精品| 亚洲免费电影一区| 亚洲精品www久久久| 国产日韩精品在线| 日韩福利在线播放| 国产精品99久久久久久www| 国语对白做受69| 亚洲精品一区二区久| 日韩av大片在线| 日韩精品免费综合视频在线播放| 成人激情黄色网| 亚洲综合中文字幕在线观看| 色综合亚洲精品激情狠狠| 精品国产鲁一鲁一区二区张丽| 国内成人精品一区| 欧美整片在线观看| 1769国产精品| 日韩中文字幕精品视频| 日韩免费在线观看视频| 久久精品一本久久99精品| 色妞久久福利网| 日本精品久久久| 国产精品爽爽爽| 宅男66日本亚洲欧美视频| 国产精品嫩草视频| 亚洲一级一级97网| 欧美丝袜第一区| 成人免费高清完整版在线观看| 一区二区欧美在线| 久久久精品电影| 97精品视频在线播放| 欧美在线视频导航| 欧洲美女7788成人免费视频| 国产美女直播视频一区| 日本精品一区二区三区在线| 亚洲欧洲日产国产网站| 欧美性xxxxx| 97国产真实伦对白精彩视频8| 亚洲精品一区二区在线| 精品国产美女在线| 久久九九免费视频| 欧美成人精品激情在线观看| 日韩精品久久久久久久玫瑰园| 久久久国产在线视频| 中文字幕久久久av一区| 亚洲自拍偷拍视频| 91午夜在线播放| 日本sm极度另类视频| www.亚洲成人|