可以在Lua中加載.dll庫嗎?說我有一個編譯的.dll文件的文件夾看起來像這樣:在Lua中使用require(..)或dofile(..)加載.dll
<folder>
|------test.lua
|------mylib.dll
我可以使用該.dll庫使用需要LUA(..)或dofile處理(..)的內部?
此外.dll是否必須以某種格式?如果是的話,你可以分享我可以編譯爲lua識別的C代碼模板.dll
謝謝!
可以在Lua中加載.dll庫嗎?說我有一個編譯的.dll文件的文件夾看起來像這樣:在Lua中使用require(..)或dofile(..)加載.dll
<folder>
|------test.lua
|------mylib.dll
我可以使用該.dll庫使用需要LUA(..)或dofile處理(..)的內部?
此外.dll是否必須以某種格式?如果是的話,你可以分享我可以編譯爲lua識別的C代碼模板.dll
謝謝!
如果.DLL不是Lua擴展模塊,而只是一個通用的.DLL,那麼您可以使用「FFI」庫(如luaffi)加載它並調用其中的函數。
這裏有幾個選擇取決於你想要做什麼。 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 /調用。
谷歌「lua加載庫dll」回答你的第一個問題:http://lua-users.org/wiki/LoadLibrary – 2014-10-05 10:39:41
是的,dll需要是特殊的格式,它們需要是模塊:http:// lua -users.org/wiki/BuildingModules – 2014-10-05 10:41:09