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 ...
随机推荐
- wpf应用程序 打印标签
新建一个wpf应用程序,Xaml如下: <Window x:Class="CreateBarCodeDemo.MainWindow" xmlns="http://s ...
- Animals and Puzzle
Animals and Puzzle time limit per test 5 seconds memory limit per test 512 megabytes input standard ...
- 128M小内存VPS优化与typecho环境搭建
在使用Haphost提供的128M内存的VPS建站时,debian7+wordpress+nginx+mysql跑起来相当吃力.然后使用Debian7+typecho+lighttpd+sqlite的 ...
- 怎样解决VS2013模块对于SAFESEH 映像是不安全的
今天在使用VS2013编译一个控制台应用程序时出现了:error LNK2026 模块对于 SAFESEH 映像是不安全的,按照以下步骤轻松解决了. 打开该项目的“属性页”对话框,然后单击“链接器”- ...
- Struts中的数据处理的三种方式
Struts中的数据处理的三种方式: public class DataAction extends ActionSupport{ @Override public String execute() ...
- iOS项目架构 小谈
层级结构,自底向上 持久层(File,Realm,SQLite)<==>网络层(相信每个公司都有自己的网络层吧)==>业务层(ViewModel)==>展示层(View,VC) ...
- 移动Web框架:jQuery Mobile VS Sencha Touch
最近常被问到是用 jQuery Mobile还是Sencha Touch,本人也比较关注这两个框架,试图从以下两方面发表点儿见解: 身家背景,都系出名门 1.jQuery Mobile 建立在jQue ...
- CenOS下LAMP搭建过程
CentOS虚拟机中安装LAMP: Linux+Apache+MySQL+PHP 安装前先关闭防火墙和Selinux 把所有安装包解压到/lamp下(根目录下的lamp目录) 安装gcc, gcc-c ...
- (二)、Struts第二天
(二).Struts第二天 回顾: 问题: 1. Struts2的Action类是单例还是多例? Filter? Servlet? Listener? 2. 介绍struts2框架引入的相关jar包及 ...
- 剑指offer反转链表
way1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...