<将简单C++类导出到lua>
利用tolua++导出类到lua中简单方便,你可以导出静态成员函数、普通成员函数、静态成员变量、普通成员变量,你也可以指定类的哪些方法被导出。你可以将具有单继承的派生类导出,派生类可以很自然地访问基类的方法。更多的细节,请参考
tolua++的在线文档。
首先生成实际的c++头文件,定义我们要导出的类。tclass.h内容如下:
#ifndef_TESTCLASS_H
#define_TESTCLASS_H
#include<string.h>
classCNumber...{//tolua_export
public:
//tolua_begin
CNumber():m_nNum(0)
...{
}
CNumber(intnum):m_nNum(num)
...{
}
~CNumber()
...{
}
voidSetNumber(intnum)
...{
m_nNum=num;
}
intGetNumber()
...{
returnm_nNum;
}
intAdd(intnum)
...{
m_nNum+=num;
returnm_nNum;
}
//tolua_end
protected:
intm_nNum;
};//tolua_export
//tolua_begin
classCMessage
...{
//tolua_end
public:
//tolua_begin
CMessage()
...{
strcpy(m_szMessage,"initialmessage");
}
CMessage(char*initmsg)
...{
if(initmsg)
strncpy(m_szMessage,initmsg,256);
}
~CMessage()
...{
}
voidSetMessage(char*msg)
...{
if(msg)
...{
strncpy(m_szMessage,msg,256);
}
}
char*GetMessage()
...{
returnm_szMessage;
}
voidShowMessage()
...{
printf("thismessageisprintedinc++codewhenluacallShowMessage:%s ",m_szMessage);
}
//tolua_end
protected:
charm_szMessage[256];
};//tolua_export
#endif
为了方便,我把实现也放在了头文件中。
接下来定义pkg文件,tclass.pkg。
$#include"tclass.h"
classCNumber...{//tolua_export
public:
//tolua_begin
CNumber();
CNumber(intnum);
~CNumber(void);
voidSetNumber(intnum);
intGetNumber(void);
intAdd(intnum);
//tolua_end
};//tolua_export
//tolua_begin
classCMessage
...{
//tolua_end
public:
//tolua_begin
CMessage(void);
CMessage(char*initmsg);
~CMessage(void);
voidSetMessage(char*msg);
char*GetMessage();
voidShowMessage();
//tolua_end
};//tolua_export
和我们的第一个数组的例子一样,包含实际的C头文件,用tolua++的语法声明你想导出的部分。在导出类的时候,构造函数被映射到lua中的new,析构函数被映射为delete。他们的用法可以在后面的lua代码中看到。接下来就是用tolua++.exe生成用于完成“导出类到lua”功能的CPP文件了。
tolua++.exe-ntclass-otclass.cpptclass.pkg
把tclass.h和tclass.cpp加入到工程中。编写驱动代码,调用lua脚本文件。这部分如下:
#include"lua.hpp"
#include"tclass.h"
inttolua_tclass_open(lua_State*);
int_tmain(intargc,_TCHAR*argv[])
...{
lua_State*L=luaL_newstate();
luaopen_base(L);
tolua_tclass_open(L);
luaL_dofile(L,"../scripts/classtest.lua");
lua_close(L);
return0;
}
编写lua脚本文件classtest.lua,内容如下:
print("nowinclasstest.lua!")
--newaCNumberObject
print("nowallocateaCNumberObject:")
num=CNumber:new()
num2=CNumber:new(222)
print("init,num:"..num:GetNumber())
print("init,num2:"..num2:GetNumber())
print("nowcallSetNumber(6)")
num:SetNumber(6)
print("nowthenum:"..num:GetNumber());
num:delete()
print("numisdeleted,accessGetNumberisinvalid!")
print("invalidcall,result:"..num:GetNumber())
--newaCMessageObject
msg=CMessage:new()
print("initmsg:"..msg:GetMessage())
print("nowchangethemsgbycallmsg:SetMessage('changedmessage')")
msg:SetMessage("changedmessage")
print("nowmsg:"..msg:GetMessage())
msg:ShowMessage()
msg:delete()
print("msgisdeleted,accessGetMessageisinvalid!")
print("inivalidcall,result:"..msg:GetMessage())
OK,简单的几步工作,我们已经可以在lua中使用C++类了。有两点要注意:
1.pkg文件要包含实际的C头文件。
2.pkg文件中要声明需要导出到lua中的类,类名与实际的C头文件中的一样,只声明你想导出的部分即可。
分享到:
相关推荐
tolua++-1.0.93.tar.bz
tolua++参考手册中文版-[刘源霖(译)] PDF格式 写的很详细 留给需要的人
这是tolua++-1.0.92版本的源码,支持各种常用的平台。编译方法在自带的INSTALL中有描述。本人在windows7上用VS2012编译过,里面有二个工程,一个是编译生成tolua++.exe的,另一个是本人自己添加的,用来生成tolua++....
tolua++ 编译 及使用 简单介绍 tolua++ 是用来把 C++代码 生成 在Lua中使用的接口的工具,编译步骤比较繁琐。
tolua++-1.0.92 源码 tolua++ is an extended version of tolua, a tool to integrate C/C++ code with Lua. tolua++ includes new features oriented to c++ such as: Support for std::string as a basic type ...
Lua c++ ,tolua++工具注册C++类
lua和c++通过tolua++互调,内含有demo,以及tolua++.exe,lua5.1
lua5.1.4类库和tolua++1.0.93类库及工具打包 使用CodeBlocks 8.02 gcc 3.4.5编译的 lua 5.1.4 tolua++ 1.0.93 文件列表 liblua.a,libtolua++.a,lua51.dll,lua.exe,luac.exe,tolua++.exe
编译好的tolua++ 编译器基于1.0.93版编译,可以直接使用
tolua++编译pkg脚本工具及CurlDown源码,源码和工具在:toluapp-master\bin 目录下面,附tolua++ pkg脚本教程。
tolua++ 源代码,希望各位大侠能够看懂,希望你们维护它,它很强
编译好的tolua++ 编译器基于1.0.93版编译,可以直接使用
tolua++.exe 可执行,带liblua.dll,lua.dll
关于tolua++的资料太少,这个通过实例让你知道如何通过tolua++和C++交互,简单明了。 通过5个文件来演示这个tolua++版 hello world hello.lua ,hello.h ,hello.pkg ,Main.cpp ,build_pgk.bat 1.启动CodeBlocks...
本文是tolua++学习的入门教程,包括tolua++简介、tolua++资源文件编译 tolua++示例程序
tolua++的源码和代码生成工具,已经建好了项目,只要将新建解决方案,然后将项目加进去。当然你还是要自己将lua库和头文件链接过去
tolua++是一种第三方的软件包,可以为Lua提供面向对象的特性,这样我们就可以使用Lua来编写使用C++语言库的脚本文件. tolua使用例子.
tolua++工具的测试,lua脚本测试. vs7编译。 包含完整编译环境,lib,inc.
使用tolua++ 工具导出c++文件到lua接口, 包含全部工具及演示代码,条理清晰,简单易懂。https://blog.csdn.net/u012278016/article/details/101269992