`
king_tt
  • 浏览: 2114417 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

tolua++初探(三)

 
阅读更多
<将简单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

    tolua++-1.0.93.tar.bz

    tolua++参考手册中文版-[刘源霖(译)].rar

    tolua++参考手册中文版-[刘源霖(译)] PDF格式 写的很详细 留给需要的人

    tolua++-1.0.92源码

    这是tolua++-1.0.92版本的源码,支持各种常用的平台。编译方法在自带的INSTALL中有描述。本人在windows7上用VS2012编译过,里面有二个工程,一个是编译生成tolua++.exe的,另一个是本人自己添加的,用来生成tolua++....

    tolua++ 编译 及使用 简单介绍

    tolua++ 编译 及使用 简单介绍 tolua++ 是用来把 C++代码 生成 在Lua中使用的接口的工具,编译步骤比较繁琐。

    tolua++ 1.0.92

    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 ...

    tolua++ tool test

    Lua c++ ,tolua++工具注册C++类

    lua和C++通过tolua++进行互调的demo

    lua和c++通过tolua++互调,内含有demo,以及tolua++.exe,lua5.1

    lua5.1.4类库和tolua++1.0.93类库及工具打包

    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编译器(Mac版)

    编译好的tolua++ 编译器基于1.0.93版编译,可以直接使用

    tolua++编译pkg脚本工具及CurlDown源码

    tolua++编译pkg脚本工具及CurlDown源码,源码和工具在:toluapp-master\bin 目录下面,附tolua++ pkg脚本教程。

    toLUA++ 1.0.92

    tolua++ 源代码,希望各位大侠能够看懂,希望你们维护它,它很强

    tolua++1.0.93编译器 (win版)

    编译好的tolua++ 编译器基于1.0.93版编译,可以直接使用

    tolua++ 1.0.93

    tolua++.exe 可执行,带liblua.dll,lua.dll

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

    关于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++示例程序

    tolua++源码

    tolua++的源码和代码生成工具,已经建好了项目,只要将新建解决方案,然后将项目加进去。当然你还是要自己将lua库和头文件链接过去

    tolua ++ 使用例子

    tolua++是一种第三方的软件包,可以为Lua提供面向对象的特性,这样我们就可以使用Lua来编写使用C++语言库的脚本文件. tolua使用例子.

    tolua++测试

    tolua++工具的测试,lua脚本测试. vs7编译。 包含完整编译环境,lib,inc.

    toLua++工具及易懂演示实例.zip

    使用tolua++ 工具导出c++文件到lua接口, 包含全部工具及演示代码,条理清晰,简单易懂。https://blog.csdn.net/u012278016/article/details/101269992

Global site tag (gtag.js) - Google Analytics