Python ctypes如何跳过可选参数

2024-09-19 23:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在标题im包装中有一个函数

IMPORT_FUNCTION int WINAPI GetStuff(int id, StuffStruct* stuff, StuffList *stuffList=NULL);

我用

^{pr2}$

也试过跳过

mydll.GetStuff.argtypes = [c_int, POINTER(StuffStruct)]

我需要在不指定最后一个参数的情况下调用这个函数。我没有尝试过,并且创建了一个像这样的空指针(StuffList)() 我觉得我应该使用原型,但我现在不知道。在

stuff = StuffStruct()
np = POINTER(StuffList)()
mydll.GetStuff(2, byref(stuff), None) # tried this 
mydll.GetStuff(2, byref(stuff), np) # tried this 
mydll.GetStuff(2, byref(stuff)) # tried this

Tags: 函数import标题npthisintstuffim
2条回答

None在Python中相当于NULL。为所有三个参数声明argtypes。以下是正确的:

mydll.GetStuff.argtypes = [c_int, POINTER(StuffStruct), POINTER(StuffList)]    

stuff = StuffStruct()
mydll.GetStuff(2, byref(stuff), None)

ctypes不知道可选参数,因此必须传递一些内容。您可以始终将ctypes调用包装在Python函数中,然后调用它:

^{pr2}$

尝试:

mydll.GetStuff(2, byref(stuff), byref(0))

以及

^{pr2}$

或者

np = POINTER([])

相关问题 更多 >