您的位置:首页 > 编程语言 > Python开发

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

2013-12-01 11:54 197 查看
最近想把一组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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python ctypes struct 指针