<--!版权所有foruok,转载注明出处!-->

一个完整的例子

试验了一个完整的例子。     在C++中生成一个类,注册到lua。     从lua调用C++类的成员函数。     在Alternate.lua中写了阶乘函数factorial。     从C++中调用factorial。     Alternate.lua如下:

print( " now in alternate.lua " ); print( " initial number of AxhSystem: " ..AxhSystem:GetNumber());  AxhSystem:SetNumber( 15 ); print( " Change the number from lua,new: " ..AxhSystem:GetNumber()); print( " Now Set message to 'Hello world' " ); AxhSystem:SetMessage( " Hello world " ); print( " AxhSystem:GetMessage return: " ..AxhSystem:GetMessage()); print( " now, enter a number to change AxhSystem's number: " ); num = io.read( " *number " ); print( " you enter: " ..num); print( " set to AxhSystem " ) AxhSystem:SetNumber(num); print( " AxhSystem's new number= " ..AxhSystem:GetNumber()); function factorial(n)      if ( n == 0  ) then          return   1 ;      else          return  n  *  factorial(n - 1 );     end end

C++代码如下:

class  CAxhSystem ... { public:     CAxhSystem():m_nNumber(0)     ...{         memset(m_szMsg, 0, sizeof(m_szMsg));     }     ~CAxhSystem()     ...{     }     void SetNumber(int num)     ...{         m_nNumber = num;     }     int GetNumber()     ...{         return m_nNumber;     }     void SetMessage(const char * szMsg)     ...{         if(szMsg)             _tcsncpy(m_szMsg, szMsg, 256);     }     char * GetMessage()     ...{         return m_szMsg;     } protected:     int m_nNumber;     char m_szMsg[256]; }  ; CAxhSystem g_system; LuaStateOwner g_state; LuaObject g_globalObj; int  InitLua() ... {     g_state->OpenLibs();     g_globalObj = g_state->GetGlobals();     return 0; } int  RegisterObject() ... {     LuaObject axhmetaobj = g_globalObj.CreateTable("AxhMetaTable");     axhmetaobj.SetObject("__index", axhmetaobj);     //register functor     axhmetaobj.RegisterObjectDirect("SetNumber", (const CAxhSystem*)0, CAxhSystem::SetNumber);     axhmetaobj.RegisterObjectDirect("GetNumber", (const CAxhSystem*)0, CAxhSystem::GetNumber);      axhmetaobj.RegisterObjectDirect("SetMessage", (const CAxhSystem*)0, CAxhSystem::SetMessage);      axhmetaobj.RegisterObjectDirect("GetMessage", (const CAxhSystem*)0, CAxhSystem::GetMessage);     //get lua object     LuaObject luasys =  g_state->BoxPointer(&g_system);     luasys.SetMetaTable(axhmetaobj);     g_globalObj.SetObject("AxhSystem", luasys);     return 0; } int  _tmain( int  argc, _TCHAR *  argv[]) ... {     InitLua();     RegisterObject();     g_state->DoFile("Alternate.lua");     LuaFunction<int> factorial = g_state->GetGlobal("factorial");     printf(" Now call 'factoral' in Alternate.lua, enter a number:");     int number;     scanf("%d", &number);     printf("You ennter %d, it's factorial=%d ", number, factorial(number));     return 0; }

OK,到这里已经可以在lua和c++之间做一些交互了,可以根据需要实现我们的目标了。     接下来我要好好学习lua了,不然没办法用它来写复杂的逻辑。 <--!版权所有foruok,转载注明出处!-->

LuaPlus学习(四)相关推荐

  1. C#多线程学习(四) 多线程的自动管理(线程池) (转载系列)——继续搜索引擎研究...

    在多线程的程序中,经常会出现两种情况: 一种情况:   应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应                   这一般使用ThreadPo ...

  2. python学习四(处理数据)

    python学习四(处理数据) head first python中的一个数据处理的例子 有四个U10选手的600米成绩,请取出每个选手跑的最快的3个时间.以下是四位选手的9次成绩 James 2-3 ...

  3. PyTorch框架学习四——计算图与动态图机制

    PyTorch框架学习四--计算图与动态图机制 一.计算图 二.动态图与静态图 三.torch.autograd 1.torch.autograd.backward() 2.torch.autogra ...

  4. Docker学习四:Docker 网络

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  5. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  6. 算法学习四:算法性能分析理论基础——函数增长与渐进分析

    算法学习四:算法性能分析理论基础--函数增长与渐进分析 在算法性能分析过程中,特别是在算法运行效率分析中,我们经常使用渐渐分析法,它使我们在分析算法性能时不必纠结于不同硬件平台的差异性,着重考虑算法的 ...

  7. Tensorflow学习四---高阶操作

    Tensorflow学习四-高阶操作 Merge and split 1.tf.concat 拼接 a = tf.ones([4,32,8]) b = tf.ones([2,32,8]) print( ...

  8. [jQuery学习系列四 ]4-Jquery学习四-事件操作

    [jQuery学习系列四 ]4-Jquery学习四-事件操作 前言: 今天看知乎偶然看到中国有哪些类似于TED的节目, 回答中的一些推荐我给记录下来了, 顺便也在这里贴一下: 一席 云集 听道 推酷 ...

  9. AVI音视频封装格式学习(四)——linux系统C语言AVI格式音视频封装应用

    拖了很久的AVI音视频封装实例,花了一天时间终于调完了,兼容性不是太好,但作为参考学习使用应该没有问题.RIFF和AVI以及WAV格式,可以参考前面的一些文章.这里详细介绍将一个H264视频流和一个2 ...

  10. C1认证学习四(多媒体基础参数)

    C1认证学习四(多媒体基础参数) 文章目录 C1认证学习四(多媒体基础参数) 任务学习 任务目标 参数的定义 比特率 采样率 采样位深 任务学习 所谓的多媒体指的是多种媒体的综合,一般都包含有图像.声 ...

最新文章

  1. CLASSPATH的作用
  2. solr与mysql数据同步的方案
  3. docker笔记-docker-container
  4. poj 2689 大范围素数
  5. docker php伪静态无效,docker 安装 thinkphp+nginx
  6. 鸿蒙系统突破,华为解锁新成就!新系统用户突破1亿,鸿蒙系统也传来了新消息...
  7. SAP ABAP实用技巧介绍系列之 ABAP XSLT 定义变量
  8. 基于电子邮件的InfoPath表单发布的注意点 [Infopath 2007]
  9. django cookie、session
  10. [SCOI2009]生日礼物 单调性尺取法
  11. 宝塔:ShopXO开源商城(如何二级域名访问)- 配置篇
  12. 对开源库 limdu 命令注入漏洞 (CVE-2020-4066) 的简要分析
  13. winform keydown 等待按下另外一个键_真是没想到,手机电源键还有4个隐藏技巧,今天算是学到了...
  14. MYSQL—— 启动MYSQL 57 报错“The service MYSQL57 failed the most recent........等”的问题解决方式!...
  15. A Byte of Python 笔记(2)基本概念:数、字符串、转义符、变量、标识符命名、数据类型、对象...
  16. html loading 页面加载中(百分比)
  17. 单条知识:什么是平面束方程
  18. pidgin安装_如何在Ubuntu中禁用Pidgin通知
  19. 2022年最细Java 17新特性,是真的猛,被征服了!
  20. 天然“降脂药”,帮你“吃掉”血脂!

热门文章

  1. ARM编程中的警告和错误处理
  2. MYSQL数据库的翻页
  3. c++性能优化(cpu篇)
  4. W3C?什么是W3C相关标准?
  5. 【Inpho精品教程】Inpho简介、安装教程(附Inpho8安装包下载)
  6. Java实现.7z格式文件的压缩(打包)与解压缩
  7. 搜索不到投屏设备怎么办_乐播投屏搜索不到设备怎么办?乐播投屏搜索不到设备的解决方法...
  8. 信息检索——查全率和查准率
  9. oracle 排版,oracle中查看信息的时候修改它的排版相当的麻烦!
  10. 国外免费在线计算机课程学习