3
我想寫一個非常簡單的控制器在WinXP機器上的攝像頭。我認爲我會簡單地使用ctypes來訪問dll,而不是編寫c代碼。調用一個dll函數,需要一個指針從python的句柄(win32)
要啓動照相機,你必須調用:
BeginHVDevice(int nDevice, HHV *pHandle)
* pHandle是一個指向相機手柄,這在the.h文件被簡單地定義爲
的typedef拉手HHV;
我原以爲下面應該工作
from ctypes import *
from ctypes.wintypes import *
ailt_lib = cdll.LoadLibrary("HVDAILT")
load_camera = ailt_lib.BeginHVDevice
load_camera.restype = c_int
load_camera.argtypes = [c_int, POINTER(HANDLE)]
def initDev(res=(800,600)):
cam_int = c_int(1)
cam_handle_type = POINTER(HANDLE)
print cam_handle_type
cam_handle = cam_handle_type()
print cam_handle
cam_stat = load_camera(cam_int, cam_handle)
print cam_stat
return cam_handle
,但是,當我打電話initDev(),我得到一個ValueError:過程調用參數不夠(8字節丟失)或錯誤的調用約定。我很肯定這意味着我沒有生成兼容的指針來傳遞,但我無法弄清楚函數實際上想要接收什麼。
我花了幾天的時間搜索stackoverflow,看着ctypes文檔並嘗試各種排列,但我還沒有找到答案。
是的,那正是問題所在。非常感謝 – user3571864