Lua中的动态链接实例
C语言应用程序中经常使用动态链接机制集成各个模块;不过,动态链接机制并不是ANSI C标准的一部分,也就是说实现方法是不可以移植的。
Lua通常不会包含任何无法通过ANSI C来实现的机制,如果动态链接是一个例外。Lua打破了对可移植性的准则,为几种平台实现了一套动态链接机制。
package.loadlib是动态链接功能的核心函数,接收两个参数:动态库的完整路径名、函数名称。
loadlib函数加载指定的库,并将其链接入Lua;如你所想,并不会调用库中的任何函数,而是将一个C函数作为Lua函数返回;如果load过程中发生任何错误,返回nil。
loadlib是一个比较底层的函数,通常使用require来加载C程序库,这个函数会搜索指定的程序库,然后调用loadlib来加载库,并返回初始化函数,这个初始化函数应将库中提供的函数注册到Lua中。
作为一个简单的实例:
hello.c
#include<stdio.h>
void hello(){
printf("hello,world\n");
}
编译:gcc -o libhello.so -fPIC -shared hello.c
> f = package.loadlib('${pathhere}/libhello.so', 'hello')
> f()
hello,world
hello()函数比较简单,没有参数,没有返回值,具体的接口规范还需研究。
相关推荐
-
Lua中的动态链接实例
C语言应用程序中经常使用动态链接机制集成各个模块:不过,动态链接机制并不是ANSI C标准的一部分,也就是说实现方法是不可以移植的. Lua通常不会包含任何无法通过ANSI C来实现的机制,如果动态链接是一个例外.Lua打破了对可移植性的准则,为几种平台实现了一套动态链接机制. package.loadlib是动态链接功能的核心函数,接收两个参数:动态库的完整路径名.函数名称. loadlib函数加载指定的库,并将其链接入Lua:如你所想,并不会调用库中的任何函数,而是将一个C函数作为Lua函数
-
php中的动态调用实例分析
本文实例讲述了php中的动态调用具体用法.分享给大家供大家参考.具体分析如下: 在程序中如果加一大堆判断的确是一个很大的麻烦,例如这样: 复制代码 代码如下: if($fun='a'){echo "哎呀!";} elesif(){} -- else{echo "嗯!";} 真的很麻烦并且造成程序后期阅读和修改时候的巨大麻烦,这时候我们可以把每一个要执行的代码段,用函数来实现,然后可以用一个更加NB的方法来实现这些功能,并且因为每一个函数实现一个功能,我们维护起来就简
-
Lua中对table排序实例
lua中利用到的排序的基本上就是构造函数(table)了,为了便于和C区分开来,我俗称它为表单. 实例:(原理就是LUA集成的冒泡算法) 排序的一般姿势(对于只包含数字或者只包含字符串的简单数组) 复制代码 代码如下: table.sort(test) 扩展版 复制代码 代码如下: table.sort(test, function(a,b) return a.id<b.id end ) 实例一:值排序 1.数组模式 复制代码 代码如下: local test0 ={1,9,2,8,3,7,4,
-
Lua中的函数代码实例
在lua中,函数是一种"第一类值",它们具有特定的词法域. 第一类值:表示在lua中,函数与其他传统类型的值(数字和字符串)具有相同的权利,函数可以存储到变量中(无论全局变量还是局部变量)或者是table中,可以作为实参传递给其他函数,还可以作为其他函数的返回值. 词法域:是指一个函数可以嵌套在另一个函数中.内部的函数可以访问外部函数中的变量. 看例子代码: 复制代码 代码如下: do function foo(a, b, c) print(a, b, c
-
Lua中调用C++函数实例
到这为止,大家对Lua和C++之间的通信应该有些熟悉了,今天我们来介绍最后一个操作. (旁白:什么?最后一个?要结束了么?太好了~!) 上一章传送门:http://www.jb51.net/article/55097.htm 1. Lua调用C++的函数 Lua要调用C++的函数还是蛮方便的,首先,我们来创建一个c++函数先: 复制代码 代码如下: public: static int getNumber(int num); int HelloLua::getNumber( int num )
-
Spring Data JPA中的动态查询实例
spring Data JPA大大的简化了我们持久层的开发,但是实际应用中,我们还是需要动态查询的. 比如,前端有多个条件,这些条件很多都是可选的,那么后端的SQL,就应该是可以定制的,在使用hibernate的时候,可以通过判断条件来拼接SQL(HQL),当然,Spring Data JPA在简化我们开发的同时,也是提供了支持的. 通过实现Criteria二实现的动态查询,需要我们的Repo接口继承JpaSpecificationExecutor接口,这是个泛型接口. 然后查询的时候,传入动态
-
Lua中数字for循环实例
看以下代码: 复制代码 代码如下: for i=1,2 do print(i) i=3 end 输出是什么?如果习惯了C/C++语言,会觉得因为改变了控制变量i为3,所以在执行第二次循环体之前判断不通过,所以输出是1. 但结果输出是1和2,即虽然改变了i,但循环还是执行了2次.这是为什么呢? 看了lua的源代码,发现在语法分析阶段,表达式中的i(也叫控制变量)和循环体中的i并不是一个值,其实表达式中的i叫internal index,循环体中的i叫external index. 所
-
java抓取网页数据获取网页中所有的链接实例分享
效果图 复制代码 代码如下: import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.regex.Matcher;import java.util.regex.Pattern; p
-
Lua中写排序算法实例(选择排序算法)
早在12年的时候,学过一个月的lua,当时看的是<programming in lua>,一直没用过,然后就忘了.现在我下定决心重新学习它. 时间久了,对编程的热情也随之消失殆尽,很难找回当初编程的乐趣了.近来一放假就玩英雄联盟,太浪费时间,玩个十来局一天就过去了,浑浑噩噩的,这实在不是我想过的.所以,今天我把它卸载了.如果你也是英雄联盟玩家,希望你不要沉迷其中. 从事游戏开发还不到一年,已经有点厌倦了,同事们一致认为游戏公司普遍很浮躁,有些小公司没有一点技术氛围.我知道的有些程序员,技术远远
-
Lua中的递归函数写法实例
先看例子吧: 复制代码 代码如下: function foo(i) --1 print("i: ", i) return i end do --local foo; --2 local foo = function (i) --3 if i < 1 then return 1 else return i * foo(i - 1) --4 end end local
随机推荐
- IOS图片无限轮播器的实现原理
- 判断Linux Shell环境变量是否存在
- 详解Redis命令和键_动力节点Java学院整理
- 5种Java经典创建型模式详解
- javascript实用小函数使用介绍
- 使用Asp.net Mvc3 Razor视图方式扩展JQuery UI Widgets方法介绍
- 图文演示Flash+ASP实现用户登录/注册程序第1/2页
- Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
- 成大事必须依靠的五种人
- Android编程单元测试实例详解(附源码)
- 从零学习node.js之文件操作(三)
- NodeJS远程代码执行
- linux多线程编程(四)
- Android 使用AlarmManager和NotificationManager来实现闹钟和通知栏
- java数据结构与算法之插入算法实现数值排序示例
- Android viewpager 3D画廊的实现方法
- Android 日常开发总结的60条技术经验
- c#中分割字符串的几种方法
- PHP Switch 语句之学习笔记
- 数组任意位置插入元素,删除特定元素的实例