我試圖通過python使用pyueye訪問我的IDS相機的GPIO。原有的函式被定義為 INT is_IO(HIDS hCam, UINT nCommand, void* pParam, UINT cbSizeOfParam)/code>。這是一個用法的例子:
示例2
INT nRet = IS_SUCCESS;
IO_GPIO_CONFIGURATION gpioConfiguration。
//設定GPIO1的配置(OUTPUT LOW)
gpioConfiguration.u32Gpio=IO_GPIO_1。
gpioConfiguration.u32Configuration = IS_GPIO_OUTPUT。
gpioConfiguration.u32State = 0;
nRet = is_IO(hCam, IS_IO_CMD_GPIOS_SET_CONFIGURATION, (void*)& gpioConfiguration,
sizeof(gpioConfiguration))。
我試圖在python中這樣做:
from pyueye import ueye
from ctypes import pointer
gpioConfiguration = ueye.IO_GPIO_CONFIGURATION
gpioConfiguration.u32Gpio = ueye.IO_GPIO_1
gpioConfiguration.u32Configuration = ueye.IS_GPIO_OUTPUT
gpioConfiguration.u32State =1
pt = pointer(gpioConfiguration)
stat = ueye.is_IO(hCam, ueye.IS_IO_CMD_GPIOS_SET_CONFIGURATION,byref(gpioConfiguration),ueye.sizeof(gpioConfiguration))
但是我得到了錯誤。TypeError: type必須有存盤資訊。 有什么想法嗎,我需要改變什么?
uj5u.com熱心網友回復:
這個錯誤實際上是由你對ctypes.pointer的呼叫引起的,而不是pyueye。 具體來說,gpioConfiguration是一個_ctypes.PyCStructType而不是一個instance。 (這就是 "必須有存盤 "的意思,也就是說,在你得到一個指向它的指標之前,你實際上必須存盤類似該結構的東西。 這在C 中可能有點奇怪,但Ctypes認為結構就像你必須即時存盤的類。docs.
因此,如果你真的需要一個指標,你將不得不這樣做:
myConfig = gpioConfiguration()
pt = pointer(myConfig)
# you probably want to set properties on the *instance*:
myConfig.u32Gpio = ueue.IO_GPIO_1
myConfig.u32State = 1
# and then use this instance later when passing `byref`.
如果你只需要通過參考來傳遞這些引數,請參閱byref部分(盡管這也需要一個實體)。
很遺憾,我沒有相機可以測驗(它們看起來非常有趣),所以我只能做到這一步。 但希望你能讓ueye的語意為你所用。
巧合的是,在Python中你不需要分號(不像在JS中你真的不需要,沒有人認為你應該把它們放進去)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/321888.html
標籤:
