Lua调用C++函数实现教程

移动开发 iOS
Lua调用C++函数实现教是本文要介绍的内容,主要是来学习Lua语言的调用,具体来看本文详细介绍。

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++函数实现教程的内容介绍完了,希望通过本文的学习能对你有所帮助!

责任编辑:zhaolei 来源: iteye
相关推荐

2011-08-25 16:47:53

LuaC++ 证书

2011-08-22 17:13:00

LuaC++函数

2013-12-13 16:53:00

Lua脚本语言C++

2010-01-28 13:35:41

调用C++函数

2010-01-21 11:23:58

C++函数调用

2011-08-23 16:59:16

C++LUA脚本LUA API

2011-08-23 09:50:29

LuaPlusLua 脚本

2023-11-09 23:31:02

C++函数调用

2010-01-20 14:25:56

函数调用

2010-02-03 15:52:55

C++ clock()

2010-02-05 15:59:26

C++函数重载

2011-08-29 16:48:50

Lua配置文件C++

2011-07-20 16:09:08

C++

2023-12-24 12:56:14

C++函数语言

2010-02-01 13:26:58

C++读取CSV文件

2010-02-04 17:16:33

C++调用python

2020-08-21 13:20:36

C++If ElseLinux

2022-01-14 09:10:56

C++文件Linux

2011-08-29 15:58:51

Lua函数

2010-01-18 17:38:54

C++虚函数表
点赞
收藏

51CTO技术栈公众号