2014-10-05 93 views
1

可以在Lua中加載.dll庫嗎?說我有一個編譯的.dll文件的文件夾看起來像這樣:在Lua中使用require(..)或dofile(..)加載.dll

<folder> 
    |------test.lua 
    |------mylib.dll 

我可以使用該.dll庫使用需要LUA(..)或dofile處理(..)的內部?

此外.dll是否必須以某種格式?如果是的話,你可以分享我可以編譯爲lua識別的C代碼模板.dll

謝謝!

+0

谷歌「lua加載庫dll」回答你的第一個問題:http://lua-users.org/wiki/LoadLibrary – 2014-10-05 10:39:41

+0

是的,dll需要是特殊的格式,它們需要是模塊:http:// lua -users.org/wiki/BuildingModules – 2014-10-05 10:41:09

回答

0

如果.DLL不是Lua擴展模塊,而只是一個通用的.DLL,那麼您可以使用「FFI」庫(如luaffi)加載它並調用其中的函數。

1

這裏有幾個選擇取決於你想要做什麼。 Lua的「規定」將加載DLL並期待一個單一的功能是存在:

int luaopen_XXXXX (lua_State* L) 

的DLL必須命名以匹配「XXXXX」的一部分,所以如果你寫了一個名爲「sprite.dll」模塊那麼你需要創建一個名爲luaopen_sprite的函數。

從這個函數內部,你可以用Lua'C'API手動註冊'C'函數,它允許你的腳本調用它們。請參閱Lua文檔。

你也可以使用包裝工具。我廣泛使用了SWIG。它會自動獲取頭文件並構建一個包含上述所有內容的C或C++文件。

也可以使用FFI(外部函數接口)。它是一種直接調用C接口的方式,我相信它使用低級處理器特定的堆棧構造和jmps /調用。