• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua5.1中加载dll动态链接库的方法

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

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了动态链接库dll下载,dll动态链接库修复,dll动态链接库,动态链接库msvcrt.dll,动态链接库dll失败等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、加载专门为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:
require(“alien”)
</div>
2、加载动态链接库:(此处以”msvcrt.dll”为例)
libc = alien.load(“msvcrt.dll”)
</div>   
3、说明参数类型:(第一个参数表示返回类型,后面的参数表示传入参数类型)
  libc.puts:types(“void”, “string”)
</div>

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

以上三步完成了dll的加载,之后便可调用dll中的函数来实现操作,例如:
libc.puts(“test”)
</div>

当传入引用类型参数时,需要alien在堆栈中分配空间,lua的变量将值传递给函数参数,如:
scanf = libc.scanf
scanf:types(“int”, “string”, “ref int”, “ref double”)
_, x, y = scanf(“%i %lf”, 1, 1) — 后面两个参数没有实际意义,只是为了说明参数个数
</div>
调用时输入23和24.5,输入的这2个参数才是真正需要传递给函数的参数,ref int, ref double是告诉alien需要分配空间,调用C函数从栈中获取它的参数,调用结束后将返回结果放到栈中(为了区分返回结果和栈中的其他的值,每个C函数还会返回结果的个数),然后lua函数返回结果值。

</div>

您可能想查找下面的文章:

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

相关文章

  • 深入解读Lua中迭代器与泛型for的使用
  • Lua教程(十三):弱引用table
  • Linux下编写Lua扩展so文件和调用方法实例
  • Lua数据类型介绍
  • Lua教程(十七):C API简介
  • Lua中__index和__newindex之间的沉默与合作
  • Lua中的闭包小结
  • Lua之字符串格式化例子和常用格式化参数介绍
  • Lua中..和#运算符的使用方法
  • Lua的迭代器使用中应该避免的问题和技巧

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Lua中的基本数据类型详细介绍
    • Lua进阶教程之闭包函数、元表实例介绍
    • C语言中调用Lua函数实例
    • Redis教程(五):Set数据类型
    • Lua脚本调用外部脚本
    • Lua极简入门指南:全局变量
    • Lua学习笔记之数据类型
    • Lua 极简入门指南(七):面向对象编程
    • Lua教程(四):函数详解
    • Lua中的控制结构(流程控制)简明总结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有