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指针组合的东西混淆,没有看到这个......非常感谢你。为我修好了。如果你把它作为答案发布,我会将其标记为解决方案。再次感谢 –