Lua調用C++函數實現教程
Lua調用C++函數實現教是本文要介紹的內容,主要是來學習Lua語言的調用,具體來看本文詳細介紹。
環境:Visual C++ 2008 Express Edition + Lua 1.5 + SciTE(lua編輯器)
下載 Visual C++ 2008 Express Edition + Lua ,下載后安裝,省略N字。
環境配置:
1、打開Visual C++ 2008(后面簡稱VC2008),新建一個C++ project,File->New Project->Empty Project,在Name欄輸入工程名,然后OK.
2、設置生成DLL文件,右鍵工程名,Properties->Configuration Properties->General->Configuration Type->選擇Dynamic Library(.dll)
3、設置C/C++、Lua。C/C++->General->Additional Include Directories->選擇Lua的安裝路徑下的include,我Lua安裝在"C:\Program Files\Lua",我的完整路徑:"C:\Program Files\Lua\5.1\include"。
4、設置Linker:Linker->General->Additional Library Directories->選擇Lua安裝目錄下的lib目錄就可以了。我的完整路徑:"C:\Program Files\Lua\5.1\lib".
5、設置Input:Input->Additional Dependencies->這里手動輸入"lua5.1.lib"就可以了。點擊確認。
OK,暫時配置就到這里,下面還需要配置一個模塊定義文件。等等再說。
Test Lua調用C++函數
1、選擇Source Files,右鍵Add->New Item->選擇 C++ File(.cpp)->Add->Name欄輸入hello->Add。
2、在hello.cpp文件中輸入下面Code.
- //依賴文件
- //因為建的是C++ Project,所以這里必須要加extern "C" ,如果不加這個是沒辦法編譯的。
- extern "C" {
- #include "lua.h"
- #include "lualib.h"
- #include "lauxlib.h"
- }
- #include <windows.h>
- #include <wincrypt.h>
- //因為建的是C++ Project,所以這里必須要加extern "C"
- extern "C" int hello(lua_State* L){
- printf("------>> Hi! %s \n",(LPTSTR)lua_tostring(L,1));
- return 0;
- }
- //--------注冊函數-----------
- struct luaL_reg lrLibs[] =
- {
- { "hello", hello },
- { NULL, NULL } /* sentinel */
- };
- // 該函數是庫的入口函數,需要在Lua中調用用來注冊庫函數列表
- // 因為Lua是用C語言寫的,所以導出函數需要符合C語言調用規范
- // 返回值:注冊的函數庫,其實為一個table
- extern "C" int luaopen_hello( lua_State* L )
- {
- //注冊名為hello的函數庫
- luaL_register( L, "hello", lrLibs );
- return 1;
- }
3、建一個模塊定義文件,在環境配置中說到過,這里先不介紹怎么配置。
(1)這個時候要在當前Project下面建立文件,文件后綴為.def的文件。我這里定義的是叫“lua_c.def”的文件。
(2)這個文件很簡單,首先在文件最上面加上 EXPORTS,然后再將你在C++文件中定義的那個入口函數的函數名加進來就可以了。(就是上面的luaopen_hello)。
(3)將模塊定義文件加入到Project,右鍵Resource Files->add->Add Existing Item->選擇新建的lua_c.def文件,Add.
4、將模塊定義文件配置到Project中,上面環境配置沒有說完的,Properties->Configuration Properties->Linker->Input->Module Definition File->輸入上面建的lua_c.def文件,確定。
OK!到這里就基本上配置好了。
編譯Project:
1、右鍵Project->Build,在控制臺可以看到Build的信息。
2、在當前Project\Debug\,就可以找到與工程名相同的 hello.dll(我這里Project Name是hello)文件了,這個文件就可以在Lua中使用了。
建Lua文件測試:
1、打開SciTE編輯器,新建一個文件,在文件中輸入下面的內容:
-- "hello"是模塊的名字,與Project Name相同
- require("hello");
-- 在C++文件中注冊的名字
- local f = hello;
-- 調用C++文件中定義的方法,"Lua"就是參數了。
- f.hello("Lua");
2、保存,取個名字,我這是LuaVC.lua.
3、運行。快捷鍵 F5.這里需要注意下,需要把hello.dll文件拷到Lua能找到的路徑下,我這里放在了與Lua文件一起。
如果都沒有問題的話就可以看到SciTE控制臺輸出
- Hi!Lua
小結:Lua調用C++函數實現教程的內容介紹完了,希望通過本文的學習能對你有所幫助!