lua指令碼呼叫C 動態庫中的函式

2021-05-25 10:26:57 字數 644 閱讀 5769

這兩天讀到的乙個開源**裡面用了c++和lua的混合呼叫,感覺比較犀利,確實用指令碼語言可以將c++編譯好的功能進行很多的擴充套件.於是也想自己試一下,不過想法略有些不同,開源專案中用到的是c++**中初始化好整個程式的流程,然後在過程中將控制權交給lua指令碼去處理,我想直接寫乙個lua指令碼,用lua來執行這個指令碼,並且使用c++中的函式,網上查了一些資料,算是入了門,就開始自己試驗.

這裡介紹一篇文章,我就是對照這篇文章動手的:

這篇文章介紹兩種不同的註冊c++函式的方式,及對應的在lua中載入的不同方式,不過沒有提到一些細節,我補充一下:

假設你匯出的動態庫是test.so,那麼你在lua中require的時候,輸入的就應該是"test"作為引數,這似乎是理所當然的,要載入這個動態庫嗎,當然是要輸入動態庫的名字了.不過不用帶上副檔名.lua會在幾個目錄中去搜尋庫檔案,有興趣的可以自己研究一下.但是如果你使用了上述文章中的**,你會發現lua告訴你require失敗,提示no such file or directory.這是為什麼呢?我到最後才看明白,其實是lua載入動態庫的一種機制,就像找到乙個入口函式一樣,它也要去找對應的入口函式,如果require的引數是"test」,它就會去找luaopen_test函式,顯然上述文章中的**不是匯出的這個函式,所以載入就會失敗.那麼該如何解決相信你也明白了,我就不多說了.

Lua指令碼呼叫C 動態庫

前言 又是n久沒上來了,也沒什麼新鮮話想說。反正最近是被杭州的房價憋得抑鬱,但是也是只能對自己說要 蛋腚 今天又被這個lua呼叫dll給抑鬱了一把,還好網上搜來搜去,終於搜到一位 有識之士 的帖子,幫我搞定了這個 憋屈 的問題。最近很懶,懶得寫東西。lua呼叫c的dll的例子網上也不是很多,其實要說...

Lua 指令碼呼叫 C 函式

上篇說到 c 程式裡呼叫lua 函式,此篇講lua 指令碼裡呼叫c 函式。lua要呼叫c 程式裡的函式,這些函式必須有同樣的原型 typedef int luafunc lua state l 結合工作上的業務來實現乙個簡單的lua 呼叫 c 函式的例子,業務是上這樣的,有一可攜式裝置向我們的裝置傳...

Lua中呼叫C函式

lua利用乙個虛擬的堆疊來給c傳遞值或從c獲取值。每當lua呼叫c函式,都會獲得乙個新的堆疊,該堆疊初始包含所有的呼叫c函式所需要的引數值 lua傳給c函式的呼叫實參 並且c函式執行完畢後,會把返回值壓入這個棧 lua從中拿到c函式呼叫結果 1 typedef struct lua state lu...