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介面函式的功能
有時候希望打印出來,但如果返回值不對的時候,列印總是出錯,於是寫了一個列印函式