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
随机推荐
- ColdFusion与FLASH通信轻松入门教程
- mysql登录警告问题的解决方法
- [导入][原创]用脚本控制迅雷下载
- Linux下实现SSH免密码登录和实现秘钥的管理、分发、部署SHELL脚本分享
- jQuery+AJAX实现遮罩层登录验证界面(附源码)
- Python tkinter模块弹出窗口及传值回到主窗口操作详解
- JavaScript类的写法
- JS异常处理的一个想法(sofish)
- php将字符串转换成16进制的方法
- php加密解密实用类分享
- JDBC连接Oracle数据库常见问题及解决方法
- 深入解析C语言中的内存分配相关问题
- PHPUnit PHP测试框架安装方法
- Ajax PHP 边学边练 之三 数据库
- 提升你网站水平的jQuery插件集合推荐
- jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
- jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
- 一个很酷的拖动层的js类,兼容IE及Firefox
- IE6/7/8/9不支持exec的简写方式
- java常用工具类之Excel操作类及依赖包下载