`
yuankai
  • 浏览: 107118 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Lua调用C++函数实现

    博客分类:
  • Lua
阅读更多
  在网上找了N久Lua怎么样实现调用C++的方法无果,发现大部分都是你贴我我贴你的,基本上没能找到可以顺利测试通过的例子。Lua调用C的方法很顺利的通过了,但是用C++文件死活通不过,郁闷了1天多时间,今天终于测试成功!
环境: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.
//----------依赖文件-----------
//因为建的是C++ Project,所以这里必须要加extern "C" ,如果不加这个是没办法编译的。
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#include <windows.h>
#include <wincrypt.h>
//因为建的是C++ Project,所以这里必须要加extern "C"
extern "C" int hello(lua_State* L){
printf("------>>  Hi! %s \n",(LPTSTR)lua_tostring(L,1));
return 0;
}

//--------注册函数-----------
struct luaL_reg lrLibs[] =  

     { "hello", hello }, 
     { NULL, NULL }  /* sentinel */ 
};
// 该函数是库的入口函数,需要在Lua中调用用来注册库函数列表 
// 因为Lua是用C语言写的,所以导出函数需要符合C语言调用规范 
// 返回值:注册的函数库,其实为一个table 
extern "C" int luaopen_hello( lua_State* L ) 

      //注册名为hello的函数库 
     luaL_register( L, "hello", lrLibs ); 
     return 1; 
}
3.建一个模块定义文件,在环境配置中说到过,这里先不介绍怎么配置。
A.这个时候要在当前Project下面建立文件,文件后缀为.def的文件。我这里定义的是叫“lua_c.def”的文件。
B.这个文件很简单,首先在文件最上面加上 EXPORTS,然后再将你在C++文件中定义的那个入口函数的函数名加进来就可以了。(就是上面的luaopen_hello)。
C.将模块定义文件加入到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相同
require("hello");
-- 在C++文件中注册的名字
local f = hello;
-- 调用C++文件中定义的方法,"Lua"就是参数了。
f.hello("Lua");
2.保存,取个名字,我这是LuaVC.lua.
3.运行。快捷键 F5.这里需要注意下,需要把hello.dll文件拷到Lua能找到的路径下,我这里放在了与Lua文件一起。
如果都没有问题的话就可以看到SciTE控制台输出
Hi!Lua
完!
关于Lua的信息可以google下,这里不多少。
推荐一个Lua网站(风格与javaeye很像):
http://www.icynorth.com/forums/index.php?sid=ddbe32329159a7e1481bdde7ccd6e72e

附件是我写的测试代码,用VC2008可以直接打开。


0
0
分享到:
评论

相关推荐

    lua调用C++函数

    标题"lua调用C++函数"所涉及的知识点主要包括: 1. **Lua与C++的交互接口**:Lua提供了一个名为`luaL_newstate`的API来创建一个新的Lua状态机,这是与C++交互的基础。然后,通过`luaL_openlibs`打开标准库,使Lua...

    Lua的最基本使用 C++与lua的互相调用

    在本文中,我们将深入探讨如何在C++程序中集成Lua,实现C++调用Lua函数以及Lua调用C++函数。 一、C++调用Lua函数 1. 配置环境:首先,你需要在C++项目中包含Lua库。确保已经下载并正确安装了Lua,并将其头文件和库...

    lua 调用 c++ dll 示例

    加载 DLL 后,你可以像调用 Lua 函数一样调用 C++ 函数: ```lua local result = lib.add(3, 5) print(result) -- 输出:8 ``` 6. **异常处理**: 在 Lua 中,由于它没有内置的异常机制,你需要在 C++ 侧处理...

    lua调用C++的经典实例.rar

    通过以上步骤,我们可以成功地在Lua中调用C++函数,实现两种语言的高效协同。这个实例不仅展示了如何在实际项目中结合使用Lua和C++,还强调了跨语言调用的注意事项和调试技巧。理解这些细节对于提升开发效率和代码...

    tolua++ 版helloworld (lua脚本调用C++类的成员函数方法)

    关于tolua++的资料太少,这个通过实例让你知道如何通过tolua++和C++交互,简单明了。 通过5个文件来演示这个tolua++版 hello world hello.lua ,hello.h ,hello.pkg ,...这个程序实现了脚本调用C++类的成员函数方法

    LUA调用C++类

    首先,要实现LUA调用C++类,我们需要一个中间层,这个中间层通常被称为"绑定"或"包装器"。LUA的C API提供了与C/C++交互的接口,我们可以利用这些接口来创建C++类的LUA表示。这里,我们有一个名为`luawrapper`的文件...

    lua_test.rar_C++_c# lua_c++ lua_lua_lua调用C++

    在Lua中,调用C++函数通常需要通过全局环境中的一个表(table)来完成,这个表是C++导出给Lua的接口。例如,你可能会看到类似以下的Lua代码: ```lua local cplusplus = require("cpp_module") -- 加载C++模块 ...

    Lua的使用入门之在C++程序中调用lua函数1

    本教程将详细介绍如何在C++程序中调用Lua函数,实现文本的获取与显示策略。 首先,你需要安装Lua库,并将其头文件和库文件添加到你的C++项目中。对于Visual Studio 2008(vc2008)用户,可以通过NuGet或手动下载Lua...

    LUA调用C++经验分享.doc

    本文将详细介绍两种常见的LUA调用C++函数的方法。 首先,第一种方式是使用`lua_register`进行注册。tolua++工具会自动生成绑定C++和LUA之间的桥接代码。在C++端,我们需要定义一个导出函数,比如`mySin`,然后在主...

    lua调用C++_c2lua

    这些绑定代码定义了lua调用C++函数的接口,使得lua脚本可以直接调用C++的API,而无需手动编写复杂的接口层。 二、c2lua使用步骤 1. **准备C++代码**:首先,你需要有一段C++代码,包含你想在lua中调用的函数。确保...

    Lua调用C++证书加密解密文件函数实现

    本文将深入探讨如何利用Lua调用C++编写的证书加密解密文件函数,以实现安全的数据保护。 首先,我们需要了解Lua和C++之间的交互机制。Lua提供了`luaL_openlibs`函数来加载标准库,同时也允许我们通过`lua_register`...

    lua调用c++动态库的简单示例

    总结一下,Lua调用C++动态库的过程主要包括: 1. 在C++中编写导出函数,并编译生成DLL和.lib文件。 2. 在Lua中使用FFI库加载DLL,并定义函数原型。 3. 通过FFI加载的DLL对象调用C++函数。 这个过程看似简单,但实际...

    lua调用C/C++函数

    总结,Lua调用C/C++函数涉及到以下几个步骤: 1. 初始化Lua状态机。 2. 加载并执行Lua脚本。 3. 使用`lua_register`或`lua_pushcfunction`将C/C++函数注册到Lua。 4. 在Lua脚本中通过函数名调用这些函数。 通过这种...

    lua和c++交互

    2. **Lua调用C++函数**:为了使Lua能够调用C++函数,我们需要先在C++中注册这些函数。这通常通过lua_register或者lua_pushcfunction实现,将C++函数绑定到Lua全局表中的一个名字。然后在Lua脚本中,就可以像调用普通...

    lua通过so调用C++类

    为了在Lua中调用C++函数,我们需要使用Lua的C API,如`luaL_loadbufferx`和`lua_pcall`。首先,我们需要加载SO文件并获取导出函数的地址,这通常通过`dlopen`和`dlsym`函数完成。 ```c #include void* libHandle ...

    linux下lua调用C++的经典实例.rar

    Lua提供了一套C API,允许开发者在C/C++代码中嵌入Lua或让Lua调用C/C++函数。通过注册C函数到Lua全局表,Lua脚本可以直接调用这些函数。在C++中,我们可以封装C接口,然后在这些接口中调用C++类的方法。 在本实例中...

    Lua编程事例:调用Lua有参函数

    在本文中,我们将深入探讨如何在C++环境中,特别是使用Visual C++ 6.0,调用Lua脚本中的有参数函数。Lua是一种轻量级的脚本语言,常用于游戏开发、配置管理以及嵌入式系统中。通过C++与Lua的交互,我们可以将业务...

    lua5.3实例

    6. e14.cpp e15.lua ## lua调用c++函数 7. 文件夹class ## lua调用c++类 堆栈形式 8 文件夹student ## lua调用c++类, table形式 build: works/lua_demo$ ./build.sh e13.cpp e13 tests: works/lua_demo$ lua ...

    c++ 调用lua函数简单案例

    6. **清理和关闭**: 当你完成Lua调用后,记得清理资源并关闭Lua状态机: ```cpp lua_close(L); ``` 在`Test_lua`这个案例中,很可能包含了上述步骤的实现,展示了一个简单的C++程序如何加载并执行Lua脚本,以及...

Global site tag (gtag.js) - Google Analytics