[英]How do I call functions inside C++ DLL from Lua?
我有一個用C ++編寫的DLL,它是遺留代碼,無法修改源代碼。 我希望能夠從Lua中調用DLL內部的一些函數。
例如,我想做這樣的事情:
-- My Lua File
include(myCppDll.dll)
function callCppFunctionFromDll()
local result = myCppFunctionFromDll(arg1, arg2)
--Do something with result here
end
這樣的事情可能嗎?
嘗試外星人: http : //alien.luaforge.net/
還有C / Invoke: http : //www.nongnu.org/cinvoke/lua.html
如果Alien不能滿足您的需求,並且如果DLL具有強大的面向對象的接口,您需要獲取對象的成員和方法以及只調用導出的函數,那么它可能不容易使用,那么您應該看看生成一個包裝DLL,它將遺留API從DLL連接到Lua。
這可以通過一個包裝器生成器來完成,例如Swig ,它將為Lua以及許多其他基於類和函數聲明的腳本語言編寫包裝器,通常只需要將現有的.h文件作為輸入。
Lua也是足夠簡單的代碼,因為在C中手動編寫自己的包裝器可能更簡單。為此,從標准配方開始在C中創建Lua可調用模塊,並實現從Lua堆棧傳輸參數的函數進入適合每個API調用的形式,調用DLL,並將任何結果推回到Lua堆棧上。 這也是利用Lua能夠為DLL中必須使用輸出指針處理第二個(或更多)返回值的那些函數返回多個結果的能力的地方。 有關這些問題的討論和一些示例代碼可以在Lua用戶的Wiki上找到。
在Lua用戶的Wiki上還有一個專門用於將Lua綁定到其他語言的頁面。
您將不得不使用自動化工具,或者手工編寫C ++接口。 Lua無法處理直接的C ++代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.