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 ...
随机推荐
- SQL SERVER中强制类型转换cast和convert的区别
在SQL SERVER中,cast和convert函数都可用于类型转换,其功能是相同的, 只是语法不同. cast一般更容易使用,convert的优点是可以格式化日期和数值. 代码 select CO ...
- st-Spanning Tree
st-Spanning Tree time limit per test 4 seconds memory limit per test 256 megabytes input standard in ...
- hiho 1015 KMP
input 1<=T<=20 string1 1<=strlen(string1)<=1e4 string2 2<=strlen(string2)<=1e6 out ...
- Java的引用c++的引用和C指针的区别
Java的引用本质上就是C中的指针,而c++的引用则完全不同:有一个类 class Point { int x; int y;} 同样的一个Point p; 在Java中p表示一个引用,它等同于C语言 ...
- oracle_一次移动数据库dbf文件的操作
oracle数据库的dbf路径下面磁盘不足,需要把原始路径下面的dbf文件移动到另外一个磁盘路径下, 具体的操作有四步. 1.把整个表空间offline. 2.copy原始路径下的dbf文件到新的路径 ...
- js对象大总结2016/4/19
本地对象(非静态对象) 常用的对象Object,Funcion,Array,Boolen,String,Boolen,Number,Date,RegEXP,Error;new一下就能用的 内置对象:( ...
- this的应用
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- static加载问题
原文地址:http://blog.csdn.net/lubiaopan/article/details/4802430 感谢原作者! static{}(即static块),会在类被加载的时候执 ...
- Redis(2)用jedis实现在java中使用redis
昨天已经在windows环境下安装使用了redis. 下面准备在java项目中测试使用redis. redis官网推荐使用jedis来访问redis.所以首先准备了jedis的jar包,以及需要依赖的 ...
- 求交集,差集,并集,善用java的set
当有题目有求这些结果时,使用集合数据结构还是很快的.需要考虑的是,注意map和set的区别. public static void main(String[] args) { Set<Integ ...