上一篇中,你已经可以在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. 获取本地IP和mac等信息

    1获取mac protected string getHostMacName() { string mac = ""; ManagementClass mc; mc = new M ...

  2. 【WPF】ListBox使用UserContrl作为子控件,引入UserContrl界面

    <ListBox x:Name="housePlansLB" Margin="0" ItemsSource="{Binding HousePla ...

  3. CentOS6 配置FTP服务器

    编辑 删除 1.先检查有没有安装   rpm -q vsftpd 如果没有安装   yum install vsftpd 2.先关闭防火墙进行调试. service iptables stop 或者一 ...

  4. 【这特么是个坑。。。】iOS 10.3下解决Charles抓包ssl证书信任问题

    针对近期iOS 10.3以上的系统charles抓https信任问题 前言 最近iPhone系统更新到ios 10.3后,在公司里用Charles抓包竟然出现了一些问题,https的请求都会失败,提示 ...

  5. 【转】如何搭建IPv6测试你的APP

    IPv6的简介 IPv4 和 IPv6的区别就是 IP 地址前者是 .(dot)分割,后者是以 :(冒号)分割的(更多详细信息自行搜索). PS:在使用 IPv6 的热点时候,记得手机开 飞行模式 哦 ...

  6. 【转】C# 二维码生成

    /// <summary> /// 含有QR码的描述类和包装编码和渲染 /// </summary> public class QRCodeHelper { /// <s ...

  7. 不可在 for 循环体内修改循环变量,防止 for 循环失去控制

    不可在 for 循环体内修改循环变量,防止 for 循环失去控制. #include <iostream> /* run this program using the console pa ...

  8. Altera特殊管脚的使用(适用全系列Altera FPGA,MSEL区别除外)-来自altera论坛

    1.I/O, ASDO  在AS 模式下是专用输出脚,在PS 和JTAG 模式下可以当I/O 脚来用.在AS 模式下,这个脚是CII 向串行配置芯片发送控制信号的脚.也是用来从配置芯片中读配置数据的脚 ...

  9. R语言低级绘图函数-abline

    abline 函数的作用是在一张图表上添加直线, 可以是一条斜线,通过x或y轴的交点和斜率来确定位置:也可以是一条水平或者垂直的线,只需要指定与x轴或y轴交点的位置就可以了 常见用法: 1)添加直线 ...

  10. Spring+Swagger文档无法排序问题解决

    项目中用到swagger用于自动生成文档,遇到了好多结合后的问题.而对于这个排序问题,在查看了后端Swagger原代码之后,发现视乎当前使用的swagger(不是springfox,应该不是官方的,网 ...