在C/C++如何調用Lua

   最近學習了一下lua,覺得 專門的學習一門腳本語言沒多大的用處,好在lua是一門靈活的語言,於是想在C/C++中調用一下lua的特性,寫下這篇日誌是爲了做個筆記,以後方便翻閱。咳咳,廢話說多了,開始進入正題。

    首先,我使用的編譯環境是大學裏常用的編譯器 VC++6.0,而且這是一臺沒有預先裝過lua編譯器的機器。下載luaforwindows(簡稱lfw)網址是http://luaforge.net/frs/?group_id=377然後安裝,下載VC++6.0安裝(本文用的是中文版)

   然後用VC++6.0新建一個空的工程。直接貼圖,如下:新建後往工程中添加源文件Lua_c.cpp 目錄構建和 Lua_c.cpp源碼:

 

 添加 Lua_c.cpp文件後,在工程設置->連接->常規裏設置lua的庫文件,兩個 lua5.1.lib 和 lua51.lib 直接在“對象/庫模塊”裏添加 lua5.1.lib lua51.lib 即可。

  不過在此之前,請先在“工具”->選項->目錄 裏添加 lua5.1.lib 和lua51.lib的文件位置。才能在程序編譯的時候連接到相應的庫文件。環境設置好後,下面貼下代碼:

 

  1. /*文件名爲Lua_c.c文件 注意後綴名*/ 
  2. #include <stdio.h> 
  3. #include "lua.h" 
  4. #include "lualib.h" 
  5. #include "lauxlib.h" 
  6. /*如果爲.cpp文件 的話調用下面代碼 
  7. extern "C" { 
  8. #include "lua.h" 
  9. #include "lualib.h" 
  10. #include "lauxlib.h" 
  11. */ 
  12. /* 定義lua解釋器*/ 
  13. lua_State* L; 
  14.  
  15. int luaadd ( int x, int y ) 
  16.     int sum; 
  17.      
  18.     /* lua中的函數 */ 
  19.     lua_getglobal(L, "add"); 
  20.      
  21.     /* 壓入虛擬棧的第一個值 */ 
  22.     lua_pushnumber(L, x); 
  23.      
  24.     /* 第二個值 */ 
  25.     lua_pushnumber(L, y); 
  26.      
  27.     /* 調用傳入的兩個值,並返回一個結果 */ 
  28.     lua_call(L, 2, 1); 
  29.      
  30.     /*得到結果 ,由於返回類型不同 這裏要顯示的強制轉換*/ 
  31.     sum = (int)lua_tointeger(L, -1);  
  32.     lua_pop(L, 1); 
  33.     return sum; 
  34.  
  35. int main ( int argc, char *argv[] ) 
  36.     int sum; 
  37.     /* Lua初始化*/ 
  38.     L = lua_open(); 
  39.     /*加載lua基本庫 */ 
  40.     luaL_openlibs(L); 
  41.      
  42.     /*加載文件add.lua */ 
  43.     luaL_dofile(L, "add.lua"); 
  44.      
  45.     /* 調用加法的方法 */ 
  46.     sum = luaadd( 200, 50 ); 
  47.      
  48.     /*打印結果 */ 
  49.     printf( "The sum is %d\n", sum ); 
  50.     lua_close(L); 
  51.     printf( "Press enter to exit..." ); 
  52.     getchar(); 
  53.     return 0; 
  54.  
  55. /*在工程目錄下創建add.lua並保存*/ 
  56.  
  57. -- 兩個數相加 
  58. function add ( x, y ) 
  59.         return x + y 
  60. end 

 點擊編譯運行,ok 通過!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章