(使用lua++)Lua脚本和C++交互(四)
上一篇中,你已经可以在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++交互(四)的更多相关文章
- lua解析脚本过程中的关键数据结构介绍
在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...
- C# 运行中 Lua 语言脚本
这里就不介绍Lua语言了,使用挺广的一种脚本语言.自行百度. 第一步 使用 Nuget 安装引用 VikingErik.LuaInterface. 第二步 添加 Using using LuaInte ...
- <转>lua解析脚本过程中的关键数据结构介绍
在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...
- [译] Closures in Lua - Lua中的闭包
原文:(PDF) . 摘要 一等(first-class)函数是一种非常强大的语言结构,并且是函数式语言的基础特性.少数过程式语言由于其基于栈的实现,也支持一等函数.本文讨论了Lua 5.x用于实现一 ...
- [转][译] Closures in Lua - Lua中的闭包
http://www.cnblogs.com/plodsoft/p/5900270.html?utm_source=tuicool&utm_medium=referral 原文:(PDF) . ...
- [Sciter系列] MFC下的Sciter–3.Sciter脚本与底层交互
[Sciter系列] MFC下的Sciter–3.Sciter脚本与底层交互,脚本调用底层自定义的方法函数. 本系列文章的目的就是一步步构建出一个功能可用,接口基本完善的基于MFC框架的SciterF ...
- Linux 下 expect 脚本语言中交互处理常用命令
Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...
- Lua脚本和C++交互(一)
现在,越来越多的C++服务器和客户端融入了脚本的支持,尤其在网游领域,脚本语言已经渗透到了方方面面,比如你可以在你的客户端增加一个脚本,这个脚本将会帮你在界面上显示新的数据,亦或帮你完成某些任务,亦或 ...
- (使用lua++)Lua脚本和C++交互(三)
前两篇文章中介绍了C++调用lua.lua栈操作的一些相关知识. 下面说一下Lua的工具.我们下一步要用到其中的一个帮助我们的开发,其实,Lua里面有很多简化开发的工具,你可以去www.sourcef ...
随机推荐
- note,路况,计算
note,路况,计算
- uWSGI的stats注释,送给需要的人,欢迎指正
吐槽先,对于uWSGI状态信息没有文档说明这样一个现实,我只想说一句:F*CK YOU!!! 花了2天时间,累得眼珠子疼,针对这鬼畜的stats,借助Total Commander和VS大概撸了一边u ...
- 抽取、转换和装载介绍(七)管理ETL环境(待续)
数据仓库的目标之一是能够为增强业务功能提供适时的.一致的和可靠的数据. 为了达到上述目标,ETL必须按照下述三条标准不断地加以完善: 可靠性 可用性 易管理性 子系统22--作业调度器 子系统23-- ...
- C语言 · 完美的代价
基础练习 完美的代价 时间限制:1.0s 内存限制:512.0MB 锦囊1 使用贪心算法. 锦囊2 从左到右枚举每个字符,移动对应字符.个数为单的字符放中间. 问题描述 回文 ...
- fail-fast和fail-safe
一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除.修改),则会抛出Concurrent Modification Exceptio ...
- 部署zookeeper集群
1.把zookeeper.tar.gz解压之后,移动到/usr目录下 2.首先要给zookeeper之间的每个节点的ssh设置无密码登陆 3.在zookeeper目录下编辑zoo.cfg,复制zoo_ ...
- 浏览器向下兼容之polyfill[阅后即瞎]
我们入门JavaScript的时候都写过polyfill: 比如手写一个弹窗, 手动模拟实现一个表格, 这些魔力的对象都是浏览器原生支持的, 虽然当我成为JS专家之后再也没造过轮子, 但是最近才发现我 ...
- pymongo创建索引、更新、删除
pymongo创建索引.更新.删除 索引创建 ## collection 为数据集合collection.create_Index({'需创建索引字段': 1})collection.ensu ...
- 运行带distance field的Hiero
从http://libgdx.badlogicgames.com/releases/下载zip包并解压,切换到解压后的目录,执行: java -cp gdx.jar;gdx-natives.jar;g ...
- mysql查看表结构
SELECT COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT from information_schema.COLUMNS where TABLE_SCHEMA='ceco ...