Lua 如何調用C打包的動態庫


  • 參考地址
看雲上的《Lua編程入門》,比《Lua程序設計(第2版)中文》好多了
https://www.kancloud.cn/thinkphp/lua-guide/43809

SF上的編譯Lua源碼
https://segmentfault.com/a/1190000004904799

源碼下載地址
http://www.lua.org/ftp/lua-5.3.4.tar.gz

SF的編譯腳本挺酷的,腳本寫好,確實省很多事。

上邊基本把需要的知識點都講通了,我講一下遇到的問題,及處理

  1. 看雲上的這里是錯誤的,或者是舊版本的語法
> require "WinFeature"
> for k, v in pairs(WinFeature) do
>>      print(k, v)
>> end
ShowMsgBox functon:0028AB90
>

需要改成

dlltest = require "WinFeature"
for k, v in pairs(dlltest) do
print(k, v)
end
dlltest.ShowMsgBox()

 

  2. 這段代碼需要用新版本的函數

extern "C" __declspec(dllexport)  
int luaopen_WinFeature(lua_State* luaEnv)  
{  
    const char* const LIBRARY_NAME = "WinFeature";  
    luaL_register(luaEnv, LIBRARY_NAME, luaLibs);  

    return 1;  
} 

修改成

extern "C" __declspec(dllexport)
int luaopen_WinFeature(lua_State* luaEnv)
{
    const char* const LIBRARY_NAME = "WinFeature";
    luaL_newlib(luaEnv, luaLibs);

    return 1;
}

 

  3. 必須使用配套的 lua.dll lua.exe lua.lib

一開始使用別人編譯的Lua.exe,跑Dll,會報錯:“multiple Lua VMs detected”

 

  • 最后貼上運行的截圖

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM