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编程示例(五): 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编程示例(一):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编程示例(四):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编程示例(三):稀疏表、双端队列、格式化输出、表和循环表的格式化输出
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编程示例(二):面向对象、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编程示例(六): 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, 文本型 .
随机推荐
- 详解SpringBoot中实现依赖注入功能
- JDBC 入门(二)
- 复制数据库表中两个字段数据的SQL语句
- 把Administrator 加回在登录选单内的注册表文件
- 详解Python import方法引入模块的实例
- CentOS 7 网络配置详解
- 解析php下载远程图片函数 可伪造来路
- ThinkPHP采用模块和操作分析
- JSP bean获取各种参数
- Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解
- JS验证控制输入中英文字节长度(input、textarea等)具体实例
- Powershell使用WINDOWS事件日志记录程序日志
- MySQL 通过索引优化含ORDER BY的语句
- 开发中可能会用到的jQuery小技巧
- jQuery AjaxQueue改进步骤
- 常用排序算法整理分享(快速排序算法、希尔排序)
- serv-u FTP 安全设置简单版 图文教程
- Android之联系人PinnedHeaderListView使用介绍
- 基于vue2.0的活动倒计时组件countdown(附源码下载)
- layer.msg()去掉默认时间,实现手动关闭的方法
