3
我正在使用python(Pydev)與使用ctypes的DLL進行步進電機通信。我正試圖找回電機的位置。問題是,如果我通過線在控制檯輸入行腳本它的工作原理,但如果我運行該腳本,它總是給我0 這是我的代碼:無法從Python腳本中的C函數中檢索值,但可以在控制檯中使用
import ctypes
AC=windll.hvpositionerv2
adr=addressof
class PositionerInfo (Structure):
_fields_=[("id",c_int),("locked",c_bool)]
ptr=POINTER(PositionerInfo)()
devCount=AC.PositionerCheck(adr(ptr))
print("Devices found: "+repr(devCount))
for i in range(min(adr(ptr),devCount)):
print("ID: "+repr(ptr[i].id)+" Locked? "+repr(ptr[i].locked))
handle=POINTER(c_int)()
AC.PositionerConnect(0,adr(handle))
到目前爲止,該計劃已僅連接到設備。現在,問題是這樣的:
ypos=c_int()
AC.PositionerGetPosition(handle,1,adr(ypos)
print(ypos.value)
這總是打印0如果我運行腳本(在Eclipse中),但在控制檯中工作。
你是否嘗試過在eclipse之外運行這個?這可能是它在eclipse中運行時找不到所需的DLL,並且代碼碰巧仍然運行並打印0?否則,這可能是一個時間問題。 – 2011-02-25 16:24:43
可能是命名空間衝突,dll與python模塊的名稱相同,該模塊在pythons路徑中首先列出? – 2011-02-25 19:43:51
什麼是C函數原型?另外,要通過引用傳遞,可以使用'handle = c_int()',然後在函數參數中使用'byref(handle)'。 range()發生了什麼?爲什麼選擇adr(ptr)和devCount的最小值? – 2011-02-26 03:47:01