我有一个C函数,doxygen看起来像这样:
long function( classA * obj1,
classB * obj2,
classC ** obj3,
long value,
const char * name1,
const char * name2,
classD ** obj4,
classD ** obj5,
classD ** obj6
)
我需要从python调用它并获取最后3个参数传递给另一个dll。目前我可以调用DLL,但如果我尝试将最后3个参数传递给另一个函数,我会得到如下错误:
WindowsError: exception: access violation writing 0x0000000000000000
我可能在ctypes方面做错了什么,我会很感激如何使用它......
第二个DLL看起来像这样:
int function2(ClassD * obj4)
目前我“汇集”了最后3个这样的论点:
temp=ctypes.c_long*1
obj = temp(0)
此外,有没有办法从ctypes到swig?显然,我可以使用长函数做其他方式。
答案 0 :(得分:5)
我不得不做一些额外的挖掘来弄清楚C类型是如何工作的,以下似乎可行。对于我需要创建数组的函数:
arg = (ctypes.POINTER(ctypes.c_double) * 1)()
并通过引用传递给函数:
ctypes.byref(arg)
对于第二个函数,我只传递我创建的数组的一个元素:
arg[0]