Lua学习系列(五)
calling C functions from Lua 5.2这篇文章也不错: http://blog.csdn.net/x356982611/article/details/26688287 http://www.troubleshooters.com/codecorn/lua/lua_lua_calls_c.htm 原文:http://lua-users.org/lists/lua-l/2012-04/msg01008.html I’m in the process of developing an automated test harness for a product we are developing. The test harness will use a combination of Lua and C. One of the goals is to “hide” all the details so that when the software developers want to test their code modules, they can write script files which are used as input to the test harness. I’ve been having some issues calling C functions from Lua 5.2 Here’s a portion of the C file (and ignore the fact that it is just returning dummy values): #include <stdio.h> /* include Lua libraries */ #include "lua.h" #include "lauxlib.h" #include "lualib.h" static int create_message(lua_State *L) { int dest; int payload; int numops; int msg_ID; /* get number of arguments */ numops = lua_gettop(L); /* get destination ID */ dest = lua_tonumber(L,1); /* get payload */ payload = lua_tonumber(L,2); /* call function to generate message ID */ msg_ID = payload * 10; /* push message ID onto stack */ lua_pushnumber(L,msg_ID); /* return the number of results */ return 1; } /* table of functions accessible from Lua */ static const struct luaL_Reg testHarness [] = { {"buildMessage", create_message}, {NULL,NULL} }; int luaopen_testHarness(lua_State *L) { luaL_newlib (L, testHarness); /* register C functions with Lua */ return 1; } I compiled the C file and created a Linux dynamic library named “testHarness.so”. Here’s a simple Lua file (named “lua_test.lua”) that tests the Lua to C interface: #!/usr/local/bin/lua -- Test harness script file require("testHarness") -- link in testHarness C library -- call C routine message_ID = buildMessage(10, 20) print("Returned message_ID = " .. message_ID .. "\n") When I run run lua_test.lua from the Linux command line, I get an error message that says “attempt to call global ‘buildMessage’ (a nil value)”. If I rewrite the require statement as: th = require(“testHarness”) and change the function call to: message_ID = th.buildMessage(10,20) everything then works fine. No error occurs and the print statement is executed. Is there something I can do so that I don’t need to have the “th.” In front of the call to the buildMessage function in the C library? Eventually, I plan to take the function call out of here and pass in an input file name as a command line parameter. The input file will be the script file written by the software developers and it will simply contain a series of buildMessage() calls and calls to other soon-to-be-developed functions. For simplicity, I would prefer that the developers not have to put “th.” In front of every function call. I’ve Googled for answers but haven’t really found any. One webpage I found had an example that seemed to do what I wanted, but it was written in Lua 5.1 and used some deprecated functions. Any suggestions to solve this issue would be appreciated. Thanks, |
Lua学习系列(五)的更多相关文章
- scrapy爬虫学习系列五:图片的抓取和下载
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- Lua学习系列(二)
资源整理: 风云老师博客: http://blog.codingnow.com/eo/luaoeeeaeau/ 知乎: https://www.zhihu.com/question/20736660 ...
- Lua学习系列(一)
从现在开始,打算学习一门新的脚本语言-lua. 1.什么是lua? a) lua1 • Lua 1.0 was implemented as a library, in less then 6000 ...
- Java NIO学习系列五:I/O模型
前面总结了很多IO.NIO相关的基础知识点,还总结了IO和NIO之间的区别及各自适用场景,本文会从另一个视角来学习一下IO,即IO模型.什么是IO模型?对于不同人.在不同场景下给出的答案是不同的,所以 ...
- [jQuery学习系列五 ]5-Jquery学习五-表单验证
前言最近总是有一个感觉,虽然这些东西都自己学习并一个案例一个案例的去验证过了.但是总觉得不写成博客记录下来这些都不是自己的东西(心理作用,哈哈).所以每当学习或者复习相关的知识我都喜欢记录下来,下面开 ...
- MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式
文章索引和简介 通过上一篇的学习 我们把demo的各种关系终于搭建里起来 以及处理好了如何映射到数据库等问题 但是 只是搭建好了关系 问题还远没有解决 这篇就来写如何查找导航属性 和查找导航属性的几种 ...
- STL学习系列五:Queue容器
Queue简介 queue是队列容器,是一种“先进先出”的容器. queue是简单地装饰deque容器而成为另外的一种容器. #include <queue> 1.queue对象的默认构造 ...
- Lua学习系列(四)
lua 资源:http://www.dcc.ufrj.br/~fabiom/lua/ 第一个Lua程序 http://www.dcc.ufrj.br/~fabiom/lua/ 原文:https://w ...
- RabbitMQ入门学习系列(五) Exchange的Direct类型
快速阅读 利用Exchange的Direct类型,实现对队列的过滤,消费者启动以后,输入相应的key值,攻取该key值对应的在队列中的消息 . 从一节知道Exchange有四种类型 Direct,To ...
随机推荐
- 使用composer安装laravel
跟具官方文档说:Laravel utilizes Composer to manage its dependencies. So, before using Laravel, you will nee ...
- UIImageView 在切图规范的情况下不用设置frame
UIImageView本身是没有frame的,所以UIImageView不用设置frame,UIImageView的fram由它内部的图片决定,所以当要更改UIImageView的大小显示的时候,更改 ...
- s7-300 第9讲 定时器
- iwlist等工具的移植
http://blog.csdn.net/jk110333/article/details/8658054 参考了这边文章 -------------------------------------- ...
- String 转Map(基于Guava类库)
字符串格式:key1=value1&key2=value2...... java代码 Map<String,String> targetOrderObj = Splitter.on ...
- slf4j(simple logging facade for java)
http://www.tuicool.com/articles/IfeUfq slf4j(simple logging facade for java)是Java的简单的日志门面,它 不是具体的日 ...
- Android OpenGL ES(十二):三维坐标系及坐标变换初步 .
OpenGL ES图形库最终的结果是在二维平面上显示3D物体(常称作模型Model)这是因为目前的打部分显示器还只能显示二维图形.但我们在构造3D模型时必须要有空间现象能力,所有对模型的描述还是使用三 ...
- python注意事项
以下基于python3.4.3 1.python3与python2不兼容 2.python语言正确的缩进很重要!事实上缩进是种语法 C中需要 { } 的的地方,python使用 : +缩进 实现 3. ...
- preg_replace 方法
标红关键字 $text = "Sample sentence from KomunitasWeb, regex has become popular in web programming. ...
- 大并发大数量中的MYSQL瓶颈与NOSQL介绍
NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N ...