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++函數實現教程的內容介紹完了,希望通過本文的學習能對你有所協助!