ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python调DLL还不会?ctypes一出手,接口直接跪着喊大哥

Python调DLL还不会?ctypes一出手,接口直接跪着喊大哥 一、学前花絮我们已然学习了诸多语言方面的知识, 其中涵盖数据结构、控制语句、函数、类/对象等, 还学习了处理一般文件、CSV 文件、Excel 文件等等内容。然而市场上计算机语言极其多, 尤其是在系统环境下, 众人鉴于与外部接口便捷以及工具封装的需求, 纷纷设置了一些对外接口。除了下的DLL动态链接库这种方式外, API接口还有Linux下的SO方式, 以及apple平台的Dylib等方式。所有这些接口, 都是为了达成两大功能, 其一, 是将自身的函数等进行封装从而隐藏起来, 其二, 是让别人能够很便利地去使用。既然DLL动态链接库如此重要我们下面予以详细介绍。二、调用的DLL接口文件2.1 DLL是什么DLL 是在下的共享库文件, 也就是 -Link 动态链接库, 其里面通常放置的是已编译的函数、过程、资源或者类, 可供本机任意程序, 像 EXE、脚本、其他 DLL 等, 在运行的时候动态加载并且调用。凡是 DLL 均为经过编译的二进制库, DLL 约等于本地 API, 也就是加载之后能够直接去执行其中的函数, 这属于“接口”的实现方式。此外, DLL并不局限于C/C, Rust、Go等同样能够生成, 只要导出的符号符合系统规范就行。导出的内容并非一定是“纯函数”, 也可以放置在数据段、类、资源当中, 但是在世界里最为常见的用法便是“导出函数”以供外部进行调用。我们以DLL封装函数为例进行说明。2.2 用标准C生成DLL文件1.编写一个简单C程序实现两个整数的加法和乘法C程序C程序有着与其他的、最大的区别在于, 它是要经过编译才行的, 然而, 语言是属于解释型的那种语言它不需要进行编译, 仅仅只需要解释器就行。换个角度去看, C语言在编译之后就变成了二进制文件, 这是不可读的。而程序通常情况下是会是开放状态的, 只要在机器上面有解释器就能够执行。当然, 如果非要去把程序进行编译的话, 也并非是不可以的, 只是编译之后所占用的空间会非常大。这个问题以后再去说。2.下载C编译器进 发行页将下 -14.x.x--win32-seh-ucrt- 这般的压缩包解压至 C:\ 处, 于系统PATH里添加 C:\\bin 这段路径, 在开启的新加终端之中执行: gcc - -o add.dll add.c。当执行了以上所提及的命令之后, 便能够获得add.dll这个文件了。在这个文件当中, 是封装了加法以及乘法这两个函数的。2.3 编写程序调用add.dll接口文件调用dll文件在上述程序里头, 我们首先去导入模块, 此模块是调用dll文件所需要用到的那个模块。紧接着便涉及到怎样去引入dll文件以及输出这方面的情况。其结果是这样呈现的:输出结果普通的dll文件, 通常不会这般简易, 不过其使用方法, 大体就是如此。一旦我们掌握了此项技能, 那么基于语言, 就能达成不少外部接口功能了。三、小结在实际从事工作期间, 会碰到外部接口这一状况。先前我们所学的Json同样是一种接口, 不过它属于数据接口范畴, 能够用以跟外部程序开展数据交换。然而今日所学习的DLL动态链接库属于二进制API接口类型, 其用途在于对函数、类等信息予以封装。这是行业之内常常会碰到的情形呢。这事儿我在前几天工作时碰到了, 对方是生产特殊设备的厂商, 我们要读取对方设备产出的数据, 对方仅提供了用以调用的DLL文件 , 这般做法能被视作对自身知识产权的一项保护 , 对使用者而言也便利 , 因不须了解DLL库内部信息 , 只需知晓DLL库的使用办法就行。让我们保持学习热情多做练习。我们下期再见
返回列表