我正在通过 ctypes 将 C 库包装到 Python 中。此刻,我在一个参数上停留了一行或多行。这是 C 代码:
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
指针吗?
非常感谢!
最佳答案
所以解决方案/答案是:
gVimbaHandle = c_void_p(1)
err = self.dll.VmbFeatureBoolGet(gVimbaHandle, "GeVTLIsPresent", byref(isGigE))
谢谢@eryksun
关于python ctypes - 包装空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43851171/