it编程 > 前端脚本 > Lua

Lua5.1中加载dll动态链接库的方法

227人参与 2024-05-19 Lua

一、加载专门为lua写的扩展dll

    使用require或package.loadlib方法,在此不做过多解释。

二、加载不是专为lua写的扩展dll

    “不是专为lua写的扩展dll”是指:dll中并没有以lua注册函数的方式导出接口,而是以__declspec(dllexport)形式导出的接口。这样就不能使用“package.loadlib”方法调用,而要使用lua5.1封装过的“alien.load()”方法。(lua\5.1\lua\alien.lua)


基本用法:

1、加载alien:

2、加载动态链接库:(此处以”msvcrt.dll”为例)
   
3、说明参数类型:(第一个参数表示返回类型,后面的参数表示传入参数类型)

alien转换 lua numbers 为c的 numeric 类型, 转换 nil 为 null,strings 为 const char* , userdata 为 void* 指针。而函数返回值的转换工作正好相反 (pointer类型转换为userdata)。

以上三步完成了dll的加载,之后便可调用dll中的函数来实现操作,例如:

当传入引用类型参数时,需要alien在堆栈中分配空间,lua的变量将值传递给函数参数,如:

调用时输入23和24.5,输入的这2个参数才是真正需要传递给函数的参数,ref int, ref double是告诉alien需要分配空间,调用c函数从栈中获取它的参数,调用结束后将返回结果放到栈中(为了区分返回结果和栈中的其他的值,每个c函数还会返回结果的个数),然后lua函数返回结果值。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Linux下编写Lua扩展so文件和调用方法实例

05-19

Lua中计算、执行字符串中Lua代码的方法

05-19

Lua中遍历文件操作代码实例

05-19

lua中赋值类型代码详解

05-19

Lua检测数组(tabble)中是否包含某个值

05-19

Redis教程(五):Set数据类型

05-19

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论