python使用ctypes调用dll遇到的坑解决记录

 更新时间:2023年12月22日 11:14:16   作者:小纵横 Go学习日记  
这篇文章主要为大家介绍了python使用ctypes调用dll遇到的坑解决记录,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

使用ctypes调用dll遇到的坑

dll调用

from ctypes import *
dll = windll.LoadLibrary('MyDLL.ll')  # 方式1
dll = WinDLL('MyDLL.ll')  # 方式2
dll = CDLL('MyDLL.dll')  # 方式3
dll = cdll.LoadLibrary('MyDLL.dll') # 方式4
# 以上4中调用方式差不多

问题分析

报错OSError: [WinError 126] 找不到指定的模块

2个原因:

1. dll的路径写错了,

2. 缺少相关依赖库

我本机装的 vs2017,但是我拿到的dll是vs2012编译的,会有问题,我用vs2017重新编译后就解决了这个问题.

还有可能遇到dll无效的问题,这个是版本的原因,64位的python对应64位的dll,32位对应32位即可.

dll内方法的调用

出现 access violation reading 0x0000000025F0FA60这种异常,出现在函数需要传递指针的时候,解决办法需要指定argtypes.

dll.CreateProcess.restype = c_void_p   # 对应c的void*
theEnv = dll.CreateProcess()
# 指定参数类型
dll.Initialization.argtypes = [c_void_p,c_char_p,c_char_p,c_char_p]
p1 = c_char_p("xxx1.txt".encode('utf-8'))
p2 = c_char_p("xxx2.txt".encode('utf-8'))
p3 = c_char_p("xxx3.txt".encode('utf-8'))
ret = c_int(0)
# 此处传递过来的参数也需要是对应的类型的参数
ret = dll.Initialization(theEnv, p1, p2 ,p3)
# ctypes里没有c_int的指针类型,这里需要用POINTER自己定义一下
c_int_p = POINTER(c_int*100)  
faultID = c_int_p()
dll.GetFaultList.argtypes = [c_void_p,c_int_p]
dll.GetFaultList.restype = c_int
# 这里faultID传参时不要忘了用类型包装,否则就会出现access violation异常
rtn = dll.GetFaultList(theEnv, c_int_p(faultID))

以上就是python使用ctypes调用dll遇到的坑解决记录的详细内容,更多关于python ctypes调用dll坑的资料请关注脚本之家其它相关文章!

相关文章

  • 一文详解Python如何同时迭代多个序列

    一文详解Python如何同时迭代多个序列

    在现代数据处理和系统开发中,同时迭代多个序列是解决复杂问题的关键技术,本文将深入解析Python多序列迭代技术体系,感兴趣的小伙伴可以了解一下
    2025-09-09
  • Python 删除整个文本中的空格,并实现按行显示

    Python 删除整个文本中的空格,并实现按行显示

    今天小编就为大家分享一篇Python 删除整个文本中的空格,并实现按行显示,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python执行ping操作的简单方法

    Python执行ping操作的简单方法

    本文主要介绍了Python执行ping操作的简单方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 在自动化中用python实现键盘操作的方法详解

    在自动化中用python实现键盘操作的方法详解

    今天小编就为大家分享一篇在自动化中用python实现键盘操作的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python图像处理模块ndimage用法实例分析

    Python图像处理模块ndimage用法实例分析

    这篇文章主要介绍了Python图像处理模块ndimage用法,结合实例形式分析了Python图像处理模块ndimage基本功能及常见的图形运算操作实现技巧,需要的朋友可以参考下
    2019-09-09
  • django站点管理详解

    django站点管理详解

    这篇文章主要介绍了django站点管理详解,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • spark dataframe全局排序id与分组后保留最大值行

    spark dataframe全局排序id与分组后保留最大值行

    这篇文章主要为大家介绍了spark dataframe全局排序id与分组后保留最大值行实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Python快速实现分列转到行的示例代码

    Python快速实现分列转到行的示例代码

    这篇文章主要为大家详细介绍了如何利用Python快速实现分列转到行的效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学一下
    2023-03-03
  • 编写Python脚本来获取Google搜索结果的示例

    编写Python脚本来获取Google搜索结果的示例

    这篇文章主要介绍了编写Python脚本来获取Google搜索结果的示例,也是利用Python编写爬虫的一个简单实现,需要的朋友可以参考下
    2015-05-05
  • Python print函数:如何将对象打印输出

    Python print函数:如何将对象打印输出

    这篇文章主要介绍了Python print函数:如何将对象打印输出,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论