簡體   English   中英

如何從Lua調用C ++ DLL中的函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM