最近學習了一下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的文件位置。才能在程序編譯的時候連接到相應的庫文件。環境設置好後,下面貼下代碼:
- /*文件名爲Lua_c.c文件 注意後綴名*/
- #include <stdio.h>
- #include "lua.h"
- #include "lualib.h"
- #include "lauxlib.h"
- /*如果爲.cpp文件 的話調用下面代碼
- extern "C" {
- #include "lua.h"
- #include "lualib.h"
- #include "lauxlib.h"
- }
- */
- /* 定義lua解釋器*/
- lua_State* L;
- int luaadd ( int x, int y )
- {
- int sum;
- /* lua中的函數 */
- lua_getglobal(L, "add");
- /* 壓入虛擬棧的第一個值 */
- lua_pushnumber(L, x);
- /* 第二個值 */
- lua_pushnumber(L, y);
- /* 調用傳入的兩個值,並返回一個結果 */
- lua_call(L, 2, 1);
- /*得到結果 ,由於返回類型不同 這裏要顯示的強制轉換*/
- sum = (int)lua_tointeger(L, -1);
- lua_pop(L, 1);
- return sum;
- }
- int main ( int argc, char *argv[] )
- {
- int sum;
- /* Lua初始化*/
- L = lua_open();
- /*加載lua基本庫 */
- luaL_openlibs(L);
- /*加載文件add.lua */
- luaL_dofile(L, "add.lua");
- /* 調用加法的方法 */
- sum = luaadd( 200, 50 );
- /*打印結果 */
- printf( "The sum is %d\n", sum );
- lua_close(L);
- printf( "Press enter to exit..." );
- getchar();
- return 0;
- }
- /*在工程目錄下創建add.lua並保存*/
- -- 兩個數相加
- function add ( x, y )
- return x + y
- end
點擊編譯運行,ok 通過!