如何使用Python调用windows下DLL?

新农商网 全部 1020

如何使用Python调用windows下DLL?

回复

共3条回复 我来回复
  • 小小猿爱嘻嘻
    小小猿爱嘻嘻
    这个人很懒,什么都没有留下~
    评论

    这里简单介绍一下实现过程,不难,主要用到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基础,熟悉一下相关代码和示例,很快就能掌握的,网上也有相关教程和资料,感兴趣的可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言。

    2018-12-10 18:48:39 0条评论
  • 编码那些事
    编码那些事
    这个人很懒,什么都没有留下~
    评论

    在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中的函数时,其函数中的传递参数类型必须设置正确,对于传数值类型的比较简单,这儿不提了,下面给出一个传递结构体参数类型的例子。

    这个例子的功能是打印一个学生的信息,并返回一个指向字符串的指针。其中,学生信息定义为一个结构体类型,包括学生的姓名、年龄及分数信息,该函数的声明及结构体定义如下图所示:

    函数printStudentInfo的具体C语言实现代码如下:

    那么,在Python中的调用方式如下:

    其运行结果如下图所示:

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

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

    2019-03-21 11:35:02 0条评论
  • 鲁宾孙印象
    鲁宾孙印象
    这个人很懒,什么都没有留下~
    评论

    导入 就可以了

    2018-12-10 18:20:15 0条评论