栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

不同操作系统上的python ctypes问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

不同操作系统上的python ctypes问题

99%
的情况下,参数(和/或返回)类型不一致之间的不一致是导致这种情况的原因(检查[[SO]:通过ctypes从Python调用的C函数返回错误的)。

始终具有[Python 3.Docs]:ctypes-使用
ctypes 时,会打开Python的外部函数库。

我发现了[GitHub]:erikssm / futronics-fingerprint-reader-(主)futronics-fingerprint-
reader / ftrScanAPI.h(我不知道它与您当前所拥有的有什么不同,但是到目前为止您发布的内容似乎很匹配),并且我对您的代码做了一些更改:

  • 定义 函数的 argtypesrestype
  • 定义缺失的类型(仅出于清晰目的)
  • 其他一些无关紧要的更改(重命名)
  • 我在上面的文件中注意到的另一件事是一个
    #pragma pack(push, 1)
    宏(有关更多详细信息,请参见[MS.Docs]:pack)。对于此结构,它没有任何区别(感谢@AnttiHaapala作为提示),因为3 int4 字节)成员的对齐方式没有变化,但是对于其他结构(成员类型为“较小”(例如, charshort )),可能要添加:
    _pack_ = 1

您修改后的代码(不用说,我没有运行它,因为我没有 .dll ):

from ctypes import wintypes# ...lib = ctypes.WinDLL('ftrScanAPI.dll') # provided by fingerprint scannerclass FTRSCAN_IMAGE_SIZE(ctypes.Structure):    # _pack_ = 1    _fields_ = [        ("nWidth", ctypes.c_int),        ("nHeight", ctypes.c_int),        ("nImageSize", ctypes.c_int),    ]PFTRSCAN_IMAGE_SIZE = ctypes.POINTER(FTRSCAN_IMAGE_SIZE)FTRHANDLE = ctypes.c_void_pprint('Open device and get device handle...')lib.ftrScanOpenDevice.argtypes = []lib.ftrScanOpenDevice.restype = FTRHANDLEh_device = lib.ftrScanOpenDevice()print('handle is', h_device)print('Get image size...')image_size = FTRSCAN_IMAGE_SIZE(0, 0, 0)lib.ftrScanGetImageSize.argtypes = [FTRHANDLE, PFTRSCAN_IMAGE_SIZE]lib.ftrScanGetImageSize.restype = wintypes.BOOLif lib.ftrScanGetImageSize(h_device, ctypes.byref(image_size)):    print('Get image size succeed...')    print('  W', image_size.nWidth)    print('  H', image_size.nHeight)    print('  Size', image_size.nImageSize)else:    print('Get image size failed...')


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659562.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号