api流程控制1——ctypes,调用C的动态库

本文介绍了在Python中使用ctypes库调用C动态库时遇到的问题及解决方案,包括解决找不到模块错误、初始化链表结构、处理指向指针的指针以及数组初始化的方法。通过实例详细讲解了如何正确传递和操作这些数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想把一组api做成一个界面,来控制流程。

问题1:使用IDLE中,直接执行程序报错

Traceback (most recent call last):
  File "E:\study\python\client.py", line 143, in <module>
    gtpdll = CDLL("test.dll")
  File "D:\Python33\lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] 找不到指定的模块。

后来捣鼓了好久,才知道是缺少依赖的库。

在一次无意中发现,执行的py文件的时候,使用cmd模式,python *.py,会弹出缺少的依赖库名。

 

问题2:链表结构,就是struct里面有类型为struct的类型。在python中,可以按以下方式初始化

class TEST_LIST(Structure):
        pass
TEST_LIST._fields_= [('prev',POINTER(TEST_LIST)),('next',POINTER(TEST_LIST)),('srcfilename',c_char*256),('destfilename',c_char*256)]

 

问题3:指向指针的指针

在实现的过程中,发现若函数参数为指向指针指针,若使用双层pointer表示,就会有问题,后来使用的是

list = TEST_LIST()
list_p = pointer(list)

然后传参时使用pointer(list_p)

 

问题4:数组初始化

destfile = (c_char*256)()
destfile.value = b'result.txt'

需要注意的是,若C代码中涉及strcmp,那么c_char*256,就需要改成len(destfile.value)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值