当前位置:婀娜女性网>美好生活>心理>

ctypes使用教程

心理 阅读(1.38W)
ctypes使用教程

ctypes提供了三种调用动态库的对象:cdll、windll、oledll。

其中cdll主要用来加载C语言调用方式,windll主要用来加载WIN32调用方式,而oledll使用WIN32调用方式且返回值是Windows里返回的HRESULT值。

从而实现在python代码中调用C函数的功能。是不是很神奇。

ctypes内置函数,不需要安装

from ctypes import * # 导入

CDLL('/usr/local/lib/', mode=_GLOBAL) # 加载。

so动态库,mode=_GLOBAL实现如果调用的动态库有其它依赖库时,提前加载的功能

libc = Library('/opt/bin/lib/') # 例如,依赖了上述库,就需要加载库为全局加载

DeviceId = [0x00] * 8

DeviceId = (c_ubyte * 8)(*DeviceId) # 这个是之前比较傻的做法,因为要先给这个变量分配一段地址,其实这里用

tartInfo(byref(DeviceId)) # 调用C语言接口函数 GenStartInfo

deviceId = ctypes.c_void_p()

DeviceId = ter(deviceId)

tartInfo(DeviceId) # 使用指针即可

byref(n)返回的相当于C的指针右值&n,本身没有被分配空间

pointer返回的相当于指针左值T* p=&n,可以改变,可以取地址

这样就完成了最基本的调用C接口函数的功能

有时候希望打印出来,但如果返回值不对的时候,打印总是出错,于是写了一个打印函数