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