Lua编程示例(六): C语言调用Lua函数
C++端:
#include "stdafx.h" lua_State *L; void load_lua(lua_State **L,char *filename){ *L=luaL_newstate(); luaL_openlibs(*L); if(luaL_loadfile(*L,filename) || lua_pcall(*L,0,0,0)){ luaL_error(*L,"load file error! %s",lua_tostring(*L,-1)); } } int _tmain(int argc, _TCHAR* argv[]) { load_lua(&L,"raw.lua"); //此处若直接传入L会出错 lua_getglobal(L,"gettable"); if(lua_pcall(L,0,1,0) !=0){ luaL_error(L,"pcall wrong %s",lua_tostring(L,-1)); } luaL_checktype(L,1,LUA_TTABLE); int n=lua_objlen(L,1); printf("n = %d\n",n); lua_pushstring(L,"ee"); lua_rawseti(L,1,5); //t[n]=v,n为第三个参数,v是栈顶元素 n=lua_objlen(L,1); printf("n = %d\n",n); int i; for(i=1;i<=n;i++){ lua_rawgeti(L,1,i); printf("%s\n",lua_tostring(L,-1)); } return 0; }
lua脚本:
function gettable() tb={ "aa","bb","cc","dd"} return tb end
运行输出的结果为:
n = 4 n = 5 aa bb cc dd ee
相关推荐
-
Lua编程示例(二):面向对象、metatable对表进行扩展
counter = { count = 0 } function counter.get(self) return self.count end function counter:inc() self.count=self.count+1 end print(counter.get(counter)) counter.inc(counter) print(counter.get(counter)) counter2={ count=4, get = counter.get, inc = coun
-
Lua编程示例(三):稀疏表、双端队列、格式化输出、表和循环表的格式化输出
a={} for i=1,10 do a[i]={} for j=0,10 do if(i%2==0) then a[i][j]=0 end end end print(a[9][10]) print(a[10][10]) print() --双端队列 List={} function List.new() return {first = 0,last = -1} end function List.pushleft(list,value) local first= list.first-1 l
-
Lua编程示例(四):Lua标准库之表库、字符串库、系统库
tb1 = { "alpha","log","gamme"} print(table.concat(tb1," , ")) print(table.concat(tb1,"\n",nil,2)) print() tb1[88.99] = 'aaa' --返回索引值最大的值,并且计算小数 print(table.maxn(tb1)) print() --默认删除索引最大的元素并返回 print(table.r
-
Lua编程示例(一):select、debug、可变参数、table操作、error
function test_print(...) for i=1,select("#",...) do print(i,select(i,...)) end end test_print(11,12,13,14) print() print(debug.traceback()) print() function test(...) for i=1,arg.n do print(i.."\t"..arg[i]) end end test("a",2
-
Lua编程示例(五): C语言对Lua表的读取和添加
#include "stdafx.h" lua_State *L; void load_lua(char *filename){ L=luaL_newstate(); luaL_openlibs(L); if((luaL_loadfile(L,filename) || lua_pcall(L,0,0,0))!= 0){ luaL_error(L,"loadfile error! \n %s",lua_tostring(L,-1)); } } double getfi
-
Lua编程示例(六): C语言调用Lua函数
C++端: #include "stdafx.h" lua_State *L; void load_lua(lua_State **L,char *filename){ *L=luaL_newstate(); luaL_openlibs(*L); if(luaL_loadfile(*L,filename) || lua_pcall(*L,0,0,0)){ luaL_error(*L,"load file error! %s",lua_tostring(*L,-1))
-
Lua编程示例(八):生产者-消费者问题
这个问题是比较经典的啦,基本所有语言的多线程都会涉及到,但是没想到Lua的这个这么复杂 抓狂 看了好长时间才算看明白,先上个逻辑图: 开始时调用消费者,当消费者需要值时,再调用生产者生产值,生产者生产值后停止,直到消费者再次请求.设计为消费者驱动的设计. 图画的不太好,可以先将Filter遮住,它是过滤器对两个程序之间传递的信息进行处理.去掉Filter逻辑就更清晰些了,就是两个"线程"(其实是两个协同程序)互相调用.resume回到yield处开始,支持嵌套,返回到栈顶的y
-
Lua编程示例(七):协同程序基础逻辑
co=coroutine.create(function() print("hi") end) print(coroutine.status(co)) coroutine.resume(co) print(coroutine.status(co)) print() co=coroutine.create(function() for i=1,2 do print("co",i) coroutine.yield() end end) coroutine.resume(
-
Java并发编程示例(六):等待线程执行终止
在某些场景下,我们必须等待线程执行完成才能进行下一步工作.例如,某些程序在开始执行之前,需要先初始化一些资源.这时,我们可以启动一个线程专门来做初始化任务,等到线程任务完成后,再去执行其他部分. 为此,Thread类为我们提供了join()方法.当我们使用线程对象调用此方法时,正在掉调用的线程对象将被推迟到被调用对象执行完成后再开始执行. 在本节,示例程序演示等待初始化方法完成后,再去执行其他任务. 知其然 按照下面所示步骤,完成示例程序. 1.创建一个名为DataSourcesLoader的类
-
易语言调用API函数监视目录与文件的代码
DLL命令表 .版本 2 .DLL命令 GetPrivateProfileInt, 整数型, , "GetPrivateProfileIntA" .参数 lpAppName, 文本型 .参数 lpKeyName, 文本型 .参数 nDefault, 整数型 .参数 lpFileName, 文本型 .DLL命令 GetPrivateProfileString, 整数型, , "GetPrivateProfileStringA" .参数 lpAppName, 文本型 .
随机推荐
- 多特下载站中改首页www.2345.com的解决修改方法
- 金山毒霸2007激活码注册码附无限升级号
- c#的treeview绑定和获取值的方法
- PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
- 深入理解逻辑表达式的用法 与或非的用法
- js 关键词高亮(根据ID/tag高亮关键字)案例介绍
- python-opencv在有噪音的情况下提取图像的轮廓实例
- JS常见问题之为什么点击弹出的i总是最后一个
- 基于jQuery滑动杆实现购买日期选择效果
- SQL Server存储过程中使用表值作为输入参数示例
- 数据库测试 实用技巧及测试方法
- Google Map Api和GOOGLE Search Api整合实现代码
- NodeJS学习笔记之Connect中间件模块(二)
- 了解注册表 步进深入系统
- Apache的学习笔记
- Android打开淘宝客户端(手淘)效果及实现代码
- Django中使用Whoosh进行全文检索的方法
- JS实现继承的几种常用方式示例
- tomcat性能优化之如何搭建Apr模块
- C# winform主界面打开并关闭登录界面的方法