Python学习【63】:python如何调用windows的DLL接口文件?

一、学前花絮

我们已经学习了python语言的许多知识,包括数据结构、控制语句、函数、类/对象等,也学习了python处理一般文件、CSV文件、Excel文件等内容。而市场上的计算机语言超级多,特别是在windows系统下,大家为了与外部接口方便及工具封装的需要,都把一些对外接口。

API接口除了windows下的DLL(动态链接库)方式外,还有Linux下的SO、apple平台的Dylib等方式。所有的接口,都是为了完成两大功能,一是把自身的函数等封装隐藏起来,一是让别人可以很方便使用。

既然DLL动态链接库如此重大,我们下面予以详细介绍。

二、python调用windows的DLL接口文件

2.1 DLL是什么

DLL 就是 Windows 下的共享库文件(Dynamic-Link Library,动态链接库),里面一般放的是已编译的函数、过程、资源或类,供本机任意程序(EXE、脚本、其他 DLL)在运行时动态加载并调用。

所有 DLL 都是编译后的二进制库,DLL ≈ 本地 API:加载后可直接执行里面的函数,属于“接口”实现方式。

此外,DLL 不限于 C/C++,Delphi、Rust、Go 等也能生成,只要导出符号符合系统规范。导出内容不必定是“纯函数”,也可放数据段、类、资源,但 Windows 世界里最常见的用法就是“导出函数”供外部调用。

我们以DLL封装函数为例进行说明。

2.2 用标准C生成DLL文件

1.编写一个简单C程序,实现两个整数的加法和乘法:

Python学习【63】:python如何调用windows的DLL接口文件?

C程序

C程序与Python最大的区别是要经过编译,而python语言是解释型语言,不需要编译,只需要解释器。换个角度看,C语言编译之后就是二进制文件,是不可读的。而python程序一般情况下是开放的,只需要机器上有解释器即可执行。当然如果非要把python程序编译,也是可以的,但编译后占用的空间很大。这个问题后来再说。

2.下载C编译器

  1. 进 GitHub 发行页

https://github.com/niXman/mingw-builds-binaries/releases

  1. 下 x86_64-14.x.x-release-win32-seh-ucrt-rt_v12 这类压缩包
  2. 解压到 C:mingw64,把 C:mingw64in 加入系统 PATH
  3. 新终端执行:gcc -shared -o add.dll add.c

执行以上命令后即可获得add.dll文件。里面封装了加法、乘法两个函数。

2.3 编写Python程序调用add.dll接口文件

Python学习【63】:python如何调用windows的DLL接口文件?

Python调用dll文件

以上程序中,我们先导入ctypes模块,是python调用dll文件需要的模块。后面就是如何引入dll文件及输出。结果如下:

Python学习【63】:python如何调用windows的DLL接口文件?

输出结果

当然一般的dll文件不会如此简单,但使用方式基本就是这样。我们掌握了这项技能,就可以用python语言实现许多外部接口功能了。

三、小结

我们在实际工作中,会遇到外部接口的情况。之前我们学过的Json也是一种接口,但属于数据接口,可以用来与外部程序交换数据。而今天学习的DLL动态链接库属于二进制API接口,用于封装函数、类等信息。这是行业内常常会遇到的情况。

我在前几天的工作中就遇到了这种事情,对方是生产一些特殊设备的厂商,我们需要读取对方设备产生的数据,而对方只是提供了DLL文件供我们调用,这种方式可以认为是对自己知识产权的一种保护。对于使用者来说也方便,由于不用了解DLL库内部的信息,只需要了解DLL库的使用方法即可。

让我们保持学习热烈,多做练习。我们下期再见!

Python学习【63】:python如何调用windows的DLL接口文件?

快乐男孩

#python#

© 版权声明

相关文章

6 条评论

none
暂无评论...