[问题] ctypes 如何处理回传可能为NULL的函式?

楼主: wtchen (没有存在感的人)   2017-07-08 23:32:00
最近用ctypes写一个wrapper去使用用C开发的DLL。
有一个函式是这样:
struct __abc
{
int8_t a;
.... (其他参数省略)
struct __abc* next;
} ;
然后
typedef struct __abc* ABC;
这个函式大概长这样:
ABC GetNext(ABC x)
{
return x->next; // 可以为NULL或这个linked list的下个元素
}
用ctypes包装的时候是这样:
_GetNext = _lib.GetNext
_GetNext.argtype = [ABC]
_GetNext.restype = ABC
结果我发现,如果执行的时候回传时刚好为NULL python就会出问题。
OSError: exception: access violation writing 0x00000000
请问可以怎么解决?
感谢。
作者: uranusjr (←這人是超級笨蛋)   2017-07-09 00:11:00
你传 ABC x 为什么里面 next 是当 pointer 用这样应该是你 Python 侧的 ABC 宣告方法有问题, 正常来说 null pointer 应该会被转换成 None 才对如果是 opaque pointer 就直接用 c_void_p不然你就要手动检查, 直接把 pointer 转 bool (False 代next = _GetNext(x); if next: print('Not null')大概像上面这样
楼主: wtchen (没有存在感的人)   2017-07-09 01:54:00
原来如此。谢谢。
作者: ny8426 (kerker)   2017-07-09 10:11:00

Links booklink

Contact Us: admin [ a t ] ucptt.com