Lua調用C++函數實現教程

來源:互聯網
上載者:User

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.

 
  1. //依賴檔案  
  2.  
  3. //因為建的是C++ Project,所以這裡必須要加extern "C" ,如果不加這個是沒辦法編譯的。   
  4.  
  5. extern "C" {   
  6. #include "lua.h"   
  7. #include "lualib.h"   
  8. #include "lauxlib.h"   
  9. }   
  10. #include <windows.h>   
  11. #include <wincrypt.h>   
  12. //因為建的是C++ Project,所以這裡必須要加extern "C"   
  13. extern "C" int hello(lua_State* L){   
  14. printf("------>>  Hi! %s \n",(LPTSTR)lua_tostring(L,1));   
  15. return 0;   
  16. }   
  17.  
  18. //--------註冊函數-----------   
  19. struct luaL_reg lrLibs[] =     
  20. {    
  21.      { "hello", hello },    
  22.      { NULL, NULL }  /* sentinel */    
  23. };   
  24. // 該函數是庫的入口函數,需要在Lua中調用用來註冊庫函數列表    
  25. // 因為Lua是用C語言寫的,所以匯出函數需要符合C語言調用規範    
  26. // 傳回值:註冊的函數庫,其實為一個table    
  27. extern "C" int luaopen_hello( lua_State* L )    
  28. {    
  29.       //註冊名為hello的函數庫    
  30.      luaL_register( L, "hello", lrLibs );    
  31.      return 1;    
  32. }  

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相同

 
  1. require("hello");  

-- 在C++檔案中註冊的名字

 
  1. local f = hello;  

-- 調用C++檔案中定義的方法,"Lua"就是參數了。

 
  1. f.hello("Lua");  

2、儲存,取個名字,我這是LuaVC.lua.

3、運行。快速鍵 F5.這裡需要注意下,需要把hello.dll檔案拷到Lua能找到的路徑下,我這裡放在了與Lua檔案一起。

如果都沒有問題的話就可以看到SciTE控制台輸出

 
  1. Hi!Lua  

小結:Lua調用C++函數實現教程的內容介紹完了,希望通過本文的學習能對你有所協助!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.