1
我正在通過ctypes將C庫包裝到Python中。此刻,我堅持一行或多行參數。這裏的C代碼:python ctypes - wrap void pointer
void* gVimbaHandleFake = (void*)1;
err = VmbFeatureBoolGet(gVimbaHandleFake, "GeVTLIsPresent", &isGigE);
問題是這個奇怪的void指針。一般來說,我知道什麼是無效指針,但這個似乎是「特殊的」。如果我更改(void*)1
中的1,則程序不再工作(這是關於查找網絡攝像頭的)。它不會崩潰,但不會再找到相機。
我嘗試了很多不同的東西,在Python的最後嘗試:
gVimbaHandle = cast(1, c_void_p)
err = self.dll.VmbFeatureBoolGet(byref(gVimbaHandle), "GeVTLIsPresent", byref(isGigE))
也嘗試了「正常」的方式:
gVimbaHandle = c_void_p(1)
我的節目心不是崩潰,但它告訴我,手柄無效... 當我看着指針gVimbaHandle.value
我得到1L
作爲輸出。這可能是問題,長數據類型L
?
有沒有人知道如何解決這個問題,或者可以解釋C中的「特殊」(void*)1
指針給我?
非常感謝!
你路過的參考指針,但C語言代碼按值傳遞。使用'gVimbaHandle = c_void_p(1)'和'VmbFeatureBoolGet(gVimbaHandle,「GeVTLIsPresent」,byref(isGigE))''。 – eryksun
噢,這是正確的,是有點與Python和C指針組合的東西混淆,沒有看到這個......非常感謝你。爲我修好了。如果你把它作爲答案發布,我會將其標記爲解決方案。再次感謝 –