上一篇中,你已经可以在Lua里面用C++的函数了,那么咱们再增加一点难度,比如,我有一个CTest对象,要作为一个参数,传输给func_Add()执行,怎么办?
很简单,如果你对上面的代码仔细阅读,你会发现下面的代码一样简洁。为了支持刚才要说的需求,我们需要把Sample.lua再做一点修改。

function func_Add(x, y, f)
-- New了一个CTest对象,并进行赋值操作,最后把结果打印在屏幕上 -- local test = CTest:new()
-- test:SetData("I'm xiaotian")
-- test:GetData() f:SetData("I'm xiaotian")
f:GetData() return x..y;
end

假设就是我们要传入的CTest对象。我们要在Lua里面使用它。(我们的CLuaFn都不用改,把main函数稍微改一下即可,来看看怎么写。)

#include "CLuaFn.h"
int main(int argc, char* argv[])
{
CLuaFn CLuaFn;
CLuaFn.Init();
CLuaFn.InitClass();
CLuaFn.LoadLuaFile("Sample.lua");
CParamGroup ParamIn;
CParamGroup ParamOut;
char szData1[] = {'\0'}; sprintf(szData1, "[yang]");
_ParamData* pParam1 = new _ParamData(szData1, "string", (int)strlen(szData1));
ParamIn.Push(pParam1); char szData2[] = {'\0'};
sprintf(szData2, "[xiaotian]");
_ParamData* pParam2 = new _ParamData(szData2, "string", (int)strlen(szData2));
ParamIn.Push(pParam2); //只追加了这里
CTest* pTest = new CTest();
_ParamData* pParam3 = new _ParamData(pTest, "CTest", sizeof(CTest));
ParamIn.Push(pParam3);
//追加结束
  
char szData4[] = {'\0'};
_ParamData* pParam4 = new _ParamData(szData4, "string", );
ParamOut.Push(pParam4); CLuaFn.CallFileFn("func_Add", ParamIn, ParamOut);
char* pData = (char* )ParamOut.GetParam()->GetParam();
printf("[Main]Sum = %s.\n", pData);
getchar();
return ;
}

运行看看输出结果:

既然已经到了这里,我们索性再加点难度,如果我要把CTest作为一个对象返回回来怎么做?很简单,且看。(运行中断,问题待解决)

#include "CLuaFn.h"
int main(int argc, char* argv[])
{
CLuaFn CLuaFn;
CLuaFn.Init();
CLuaFn.InitClass();
CLuaFn.LoadLuaFile("Sample.lua");
CParamGroup ParamIn;
CParamGroup ParamOut;
char szData1[] = {'\0'}; sprintf(szData1, "[yang]");
_ParamData* pParam1 = new _ParamData(szData1, "string", (int)strlen(szData1));
ParamIn.Push(pParam1); char szData2[] = {'\0'};
sprintf(szData2, "[xiaotian]");
_ParamData* pParam2 = new _ParamData(szData2, "string", (int)strlen(szData2));
ParamIn.Push(pParam2); //只追加了这里
CTest* pTest = new CTest();
_ParamData* pParam3 = new _ParamData(pTest, "CTest", sizeof(CTest));
ParamIn.Push(pParam3);
//追加结束 //char szData4[40] = {'\0'};
//_ParamData* pParam4 = new _ParamData(szData4, "string", 40);
CTest* pTestRsult = NULL;
_ParamData* pParam4 = new _ParamData(pTestRsult, "CTest", sizeof(CTest));
ParamOut.Push(pParam4); CLuaFn.CallFileFn("func_Add", ParamIn, ParamOut); //char* pData = (char* )ParamOut.GetParam(0)->GetParam();
//printf("[Main]Sum = %s.\n", pData); //接受Lua返回参数为CTest类型,并调用其中的方法
pTestRsult = (CTest* )ParamOut.GetParam()->GetParam();
pTestRsult->GetData(); getchar();
return ;
}

(使用lua++)Lua脚本和C++交互(四)的更多相关文章

  1. lua解析脚本过程中的关键数据结构介绍

    在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...

  2. C# 运行中 Lua 语言脚本

    这里就不介绍Lua语言了,使用挺广的一种脚本语言.自行百度. 第一步 使用 Nuget 安装引用 VikingErik.LuaInterface. 第二步 添加 Using using LuaInte ...

  3. <转>lua解析脚本过程中的关键数据结构介绍

    在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...

  4. [译] Closures in Lua - Lua中的闭包

    原文:(PDF) . 摘要 一等(first-class)函数是一种非常强大的语言结构,并且是函数式语言的基础特性.少数过程式语言由于其基于栈的实现,也支持一等函数.本文讨论了Lua 5.x用于实现一 ...

  5. [转][译] Closures in Lua - Lua中的闭包

    http://www.cnblogs.com/plodsoft/p/5900270.html?utm_source=tuicool&utm_medium=referral 原文:(PDF) . ...

  6. [Sciter系列] MFC下的Sciter–3.Sciter脚本与底层交互

    [Sciter系列] MFC下的Sciter–3.Sciter脚本与底层交互,脚本调用底层自定义的方法函数. 本系列文章的目的就是一步步构建出一个功能可用,接口基本完善的基于MFC框架的SciterF ...

  7. Linux 下 expect 脚本语言中交互处理常用命令

    Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...

  8. Lua脚本和C++交互(一)

    现在,越来越多的C++服务器和客户端融入了脚本的支持,尤其在网游领域,脚本语言已经渗透到了方方面面,比如你可以在你的客户端增加一个脚本,这个脚本将会帮你在界面上显示新的数据,亦或帮你完成某些任务,亦或 ...

  9. (使用lua++)Lua脚本和C++交互(三)

    前两篇文章中介绍了C++调用lua.lua栈操作的一些相关知识. 下面说一下Lua的工具.我们下一步要用到其中的一个帮助我们的开发,其实,Lua里面有很多简化开发的工具,你可以去www.sourcef ...

随机推荐

  1. grub安装centos

    grub安装centos http://hi.baidu.com/soulshape/item/e90302e50da5a710595dd8f7

  2. plot-sin-02

    draw sin 02 设置数据区域的边界线颜色 设置坐标轴的位置 code #!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as ...

  3. OFFLINE

    2013年9月22日 20:47:42 OFFLINE 今天没有网络,或许,只有没有网络才去做一些更加有意义的事情.人就是这么贱,不是么.或许已经有点强迫症的味道的了. 中午吃完饭有2个小时的休息时间 ...

  4. am335x USB 驱动框架记录

    参考: http://processors.wiki.ti.com/index.php/AM335x_USB_Driver%27s_Guide http://processors.wiki.ti.co ...

  5. Android——ArrayList 、LinkList、List 区别 & 迭代器iterator的使用 & HashMap、Hashtable、LinkedHashMap、TreeMap

     ArrayList .LinkList.List 区别 & 迭代器iterator的使用 & HashMap.Hashtable.LinkedHashMap.TreeMap 一.几个 ...

  6. yarn 用户导致的被挖矿 启用Kerberos认证功能,禁止匿名访问修改8088端口

    用户为dr.who,问下内部使用人员,都没有任务在跑: 结论: 恭喜你,你中毒了,攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,攻击者可以在未授权的情况下远程 ...

  7. iOS开发中的错误整理,导航控制器的导航栏取消系统渲染的错误

  8. Linux 克隆虚拟机引起的“Device eth0 does not seem to be present, delaying initialization”

    Linux 克隆虚拟机引起的“Device eth0 does not seem to be present, delaying initialization” 虚拟机Vmware上克隆了一个Red ...

  9. Spark 基础及RDD基本操作

    什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合.RDD具有数据 ...

  10. r语言 包说明

    [在实际工作中,每个数据科学项目各不相同,但基本都遵循一定的通用流程.具体如下]   [下面列出每个步骤最有用的一些R包] 1.数据导入以下R包主要用于数据导入和保存数据:feather:一种快速,轻 ...