ctypes使用教程
來源:魅力女性吧 1.2W
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接口函數的功能
有時候希望打印出來,但如果返回值不對的時候,打印總是出錯,於是寫了一個打印函數