靚麗時尚館

位置:首頁 > 健康生活 > 心理

ctypes使用教程

心理1.22W
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介面函式的功能

有時候希望打印出來,但如果返回值不對的時候,列印總是出錯,於是寫了一個列印函式

標籤:ctypes