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 Streamlit实现文件的上传和下载功能

    Python Streamlit实现文件的上传和下载功能

    在Web应用中,文件的上传下载是交互中不可缺少的功能,这篇文章主要为大家介绍了如何在Streamlit应用中实现文件的上传和下载功能,感兴趣的可以了解下
    2024-12-12
  • Python中实现传递未知数量的函数参数

    Python中实现传递未知数量的函数参数

    这篇文章主要介绍了Python中实现传递未知数量的函数参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python中的turtle库函数简单使用教程

    python中的turtle库函数简单使用教程

    这篇文章主要介绍了python中的turtle库函数简单使用教程。本文通过图片的形式给大家展示的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-07-07
  • Python Pytorch深度学习之自动微分

    Python Pytorch深度学习之自动微分

    今天小编就为大家分享一篇关于Pytorch自动微分的文章,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-10-10
  • Python的索引与切片原来该这样理解

    Python的索引与切片原来该这样理解

    这篇文章主要为大家详细介绍了Python的索引与切片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • python编程Flask框架简单使用教程

    python编程Flask框架简单使用教程

    这篇文章主要为大家介绍了python编程中Flask框架简单使用教程,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • 2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用

    2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用

    这篇文章主要介绍了2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用,特此分享到脚本之家平台,需要的朋友可以参考下
    2020-03-03
  • Python绘制频率分布直方图的示例

    Python绘制频率分布直方图的示例

    今天小编就为大家分享一篇Python绘制频率分布直方图的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python实现类似Netty功能的异步编程

    python实现类似Netty功能的异步编程

    本文将介绍如何使用Python来实现本文将介绍如何使用Python来实现类似于Netty的功能,并提供一些代码示例来帮助读者理解,能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • PHP魔术方法__ISSET、__UNSET使用实例

    PHP魔术方法__ISSET、__UNSET使用实例

    这篇文章主要介绍了PHP魔术方法__ISSET、__UNSET使用实例,本文直接给出代码示例,需要的朋友可以参考下
    2014-11-11

最新评论