Python能调用dll吗,如何使用Python调用windows下DLL

software 投稿 2900 0 评论

这里简单介绍一下实现过程,不难,主要用到ctypes这个模块,实验环境win10+python3.6+pycharm5.0,主要内容如下:

1.为了更好地说明问题,这里我用vs2017编译了一个dll文件,源码如下,基于C的,一个简单的相加函数:

编译成功后,会在当前的Debug文件下生成一个DllTest.dll文件,我们的测试就是围绕这个dll文件展开:

2.新建一个文件夹,将这个dll复制进去,新建一个py文件,测试代码如下,很简单,这里主要使用的是CDLL类,指明dll文件路径就行:

程序运行截图如下,已经成功打印返回值:

3.这里也可以使用WinDLL调用dll文件,以Windows系统下的C:\Windows\System32\user32.dll文件为例,测试代码如下,与上面的类似,只不过使用的是WinDLL:

程序运行截图如下,已经成功调用:

至此,我们就完成了利用python调用windows下的dll。总的来说,整个过程不难,代码量也不是很多,CDLL和WinDLL这2种方式都可以完成dll文件的调用,只要你有一定的python基础,熟悉一下相关代码和示例,很快就能掌握的,网上也有相关教程和资料,感兴趣的可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言。

在Windows平台下,python中可以使用ctypes模块调用dll文件中的库函数。

DLL中函数约定的调用方式不同,则Python中的引入DLL库文件的形式也不同。

例如一个dll文件“MyDll.dll”,其函数约定的调用方式为C调用(cdecl)方式,则Python中加载该dll文件的代码如下:

from ctypes import *

dll = CDLL('MyDll.dll')

若DLL函数的调用约定是标准调用约定(stdcall)方式,则DLL文件的加载代码则改为:

dll = WinDLL('MyDll.dll')

在调用DLL中的函数时,其函数中的传递参数类型必须设置正确,对于传数值类型的比较简单,这儿不提了,下面给出一个传递结构体参数类型的例子。

总结:对于结构体参数的传递,在Python中需要使用Structure作为基类定义一个与之对应的结构体类Student,在类的_fields中定义结构体中每个成员变量的名称和数据类型。然后定义结构体类的一个实例对象student,对每个成员变量逐个赋值,以byref传址的方式进行调用就可以了。

对于其它诸如指针、数组等参数类型的传递,可以查阅小编以前写的关于Python中调用传递不同参数类型的DLL方法的文章。

编程学习分享 » Python能调用dll吗,如何使用Python调用windows下DLL

赞 (0) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽

高效,专业,符合SEO

联系我们