python ctypes - 包装空指针
python ctypes - wrap void pointer
我正在通过 ctypes 将 C 库包装到 Python 中。目前我在一个参数上停留在一行或多行。这里是 C 代码:
void* gVimbaHandleFake = (void*)1;
err = VmbFeatureBoolGet(gVimbaHandleFake, "GeVTLIsPresent", &isGigE );
问题是这个奇怪的空指针。一般来说,我知道什么是空指针,但这个似乎是 "special"。如果我更改 (void*)1
中的 1,程序将不再运行(它是关于查找网络摄像机的)。它没有崩溃,但再也找不到摄像头了。
我尝试了很多不同的东西,最后一次尝试是在 Python:
gVimbaHandle = cast(1, c_void_p)
err = self.dll.VmbFeatureBoolGet(byref(gVimbaHandle), "GeVTLIsPresent", byref(isGigE))
也尝试了"normal"方式:
gVimbaHandle = c_void_p(1)
我的程序没有崩溃,但它告诉我句柄无效...
当我用 gVimbaHandle.value
查看指针时,我得到 1L
作为输出。这可能是 long 数据类型的 L
的问题吗?
有谁知道如何解决这个问题或者可以向我解释 C 中的 "special" (void*)1
指针吗?
非常感谢!
所以 solution/answer 是:
gVimbaHandle = c_void_p(1)
err = self.dll.VmbFeatureBoolGet(gVimbaHandle, "GeVTLIsPresent", byref(isGigE))
感谢@eryksun
我正在通过 ctypes 将 C 库包装到 Python 中。目前我在一个参数上停留在一行或多行。这里是 C 代码:
void* gVimbaHandleFake = (void*)1;
err = VmbFeatureBoolGet(gVimbaHandleFake, "GeVTLIsPresent", &isGigE );
问题是这个奇怪的空指针。一般来说,我知道什么是空指针,但这个似乎是 "special"。如果我更改 (void*)1
中的 1,程序将不再运行(它是关于查找网络摄像机的)。它没有崩溃,但再也找不到摄像头了。
我尝试了很多不同的东西,最后一次尝试是在 Python:
gVimbaHandle = cast(1, c_void_p)
err = self.dll.VmbFeatureBoolGet(byref(gVimbaHandle), "GeVTLIsPresent", byref(isGigE))
也尝试了"normal"方式:
gVimbaHandle = c_void_p(1)
我的程序没有崩溃,但它告诉我句柄无效...
当我用 gVimbaHandle.value
查看指针时,我得到 1L
作为输出。这可能是 long 数据类型的 L
的问题吗?
有谁知道如何解决这个问题或者可以向我解释 C 中的 "special" (void*)1
指针吗?
非常感谢!
所以 solution/answer 是:
gVimbaHandle = c_void_p(1)
err = self.dll.VmbFeatureBoolGet(gVimbaHandle, "GeVTLIsPresent", byref(isGigE))
感谢@eryksun