【发布时间】:2017-10-06 15:56:20
【问题描述】:
我正在通过 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 指针吗?
非常感谢!
【问题讨论】:
-
您通过引用传递指针,但示例 C 代码通过值传递它。使用
gVimbaHandle = c_void_p(1)和VmbFeatureBoolGet(gVimbaHandle, "GeVTLIsPresent", byref(isGigE))。 -
哦,是的,没错,有点混淆了 python 和 C 指针组合的东西,没有看到这个......非常感谢。为我修好了。如果您将其发布为答案,我会将其标记为解决方案。再次感谢
标签: python c sdk ctypes word-wrap