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 位置参数基础教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • python pytest进阶之conftest.py详解

    python pytest进阶之conftest.py详解

    这篇文章主要介绍了python pytest进阶之conftest.py详解,如果我们在编写测试用的时候,每一个测试文件里面的用例都需要先登录后才能完成后面的操作,那么们该如何实现呢?这就需要我们掌握conftest.py文件的使用了,需要的朋友可以参考下
    2019-06-06
  • 用Python实现一个简单的用户系统

    用Python实现一个简单的用户系统

    大家好,本篇文章主要讲的是用Python实现一个简单的用户系统,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Python字典常见操作实例小结【定义、添加、删除、遍历】

    Python字典常见操作实例小结【定义、添加、删除、遍历】

    这篇文章主要介绍了Python字典常见操作,结合实例形式总结分析了Python字典的定义、添加、删除、遍历等常见使用技巧与操作注意事项,需要的朋友可以参考下
    2019-10-10
  • python服务器端收发请求的实现代码

    python服务器端收发请求的实现代码

    这篇文章主要介绍了python服务器端收发请求的实现代码,需要的朋友可以参考下
    2014-09-09
  • 利用python查看官方文档

    利用python查看官方文档

    这篇文章主要介绍了利用python查看官方文档,我们在学习和工作中,总是会遇到一些问题,或许官方文档能解决这一问题,下面我们就来看看python如何查看官方文档吧
    2022-01-01
  • python的sys.path模块路径添加方式

    python的sys.path模块路径添加方式

    这篇文章主要介绍了python的sys.path模块路径添加方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • pytorch图片分割原理分析

    pytorch图片分割原理分析

    自Transformer模型被应用于计算机视觉领域后,图像分割技术得到了进一步的发展,但图像分割操作复杂,特别是对张量的处理,涉及多种变换方法,其中,view/reshape用于改变数据形状,而permute/transpose用于改变数据的维度顺序
    2024-10-10
  • Python面向对象之继承原理与用法案例分析

    Python面向对象之继承原理与用法案例分析

    这篇文章主要介绍了Python面向对象之继承原理与用法,结合具体案例形式分析了Python面向对象程序设计中继承的原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-12-12
  • Python 自动化表单提交实例代码

    Python 自动化表单提交实例代码

    今天以一个表单的自动提交,来进一步学习selenium的用法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-06-06

最新评论