最近学习了一下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源码:

 

在C/C++如何调用Lua_第1张图片

 添加 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 通过!

在C/C++如何调用Lua_第2张图片