在网上找了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可以直接打开。
分享到:
相关推荐
本人亲自编译通过的程序,如果无法通过只可能是您的编译环境有问题。本人的开发环境:VC++6.0,使用的是Win32 Console Application
关于tolua++的资料太少,这个通过实例让你知道如何通过tolua++和C++交互,简单明了。 通过5个文件来演示这个tolua++版 hello world hello.lua ,hello.h ,hello.pkg ,...这个程序实现了脚本调用C++类的成员函数方法
C++调用Lua函数 以及Lua调用C++函数
基本的调用lua变量与函数,实现文本的获取与显示策略,若要改变显示方式,只要修改move()函数即可.
lua调用c++函数的实例,C++工程里使用LUA脚本,lua脚本调用c++工程的函数
LUA调用C++经验分享 我们组用lua调用c++库都是通过tolua++这个工具。这几天通过看书查阅资料和与andy等其他同事的讨论,对LUA调用c++库的实现原理...通常来说lua调用C++函数有2种方式,现详述如下: 。。。。。。。。
windows下vs2013编译出来的64位dll,给lua5.3,64位调用dll,我用的是vscode调试测试的,没有问题,不过要注意vscode一定要下载5.3的插件才能支持调试
生成lua调用C++函数等
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 ...
NULL 博文链接:https://pirateyk.iteye.com/blog/514767
简单实用的c++调用lua 的源代码案例
现在最新版本lua,lua-5.2.3。
Lua是一个很好用的脚本语言,在游戏开发中可以和c++完美结合,我总结的几点使用以及环境配置和大家分享一下,第一c++如何调用lua脚本,第二c++如何调用脚本函数,第三脚本如何调用c++函数。
在 C++中调用 lua 中的函数并处理返回值
基于C++对LUA调用的简单明了封装: 1.支持全局变量。 2.支持Lua函数调用。 3.支持table表的多重嵌套访问。
调用Lua的接口的时候需要执行进栈和出栈等重复性工作,这几个文件的目的是打造一个简单易用的接口,让C\C++更方便地使用Lua的函数
该文档主要详细介绍了,如何利用cocos2dx自带的绑定工具,注册自己的自定义c++ 函数,从而可以在lua项目里面调用c++自定类,实现lua项目的扩展
VC6.0配置LUA编译环境及LUA调用C++函数的简单示例 一步一步教你配置
对新手有帮助,刚学得朋友可以下下来看一下