8

我有一个 doxygen 看起来像这样的 C 函数:

long function( classA * obj1,
               classB * obj2,
               classC ** obj3,
               long value,
               const char * name1,
               const char * name2,
               classD ** obj4,
               classD ** obj5,
               classD ** obj6 
               )    

我需要从 python 调用它并获取最后三个参数以传递给另一个 dll。目前我可以很好地调用 DLL,但是如果我尝试将最后 3 个参数传递给另一个函数,我会收到如下错误:

WindowsError: exception: access violation writing 0x0000000000000000

我可能在 ctypes 方面做错了什么,我希望能对如何使用它有所了解......

第二个 DLL 如下所示:

int function2(ClassD *  obj4)   

目前我像这样“组装”最后三个参数:

  temp=ctypes.c_long*1
  obj = temp(0)

另外,有什么方法可以从 ctypes 到 swig 吗?显然我可以使用 long 函数做相反的事情。

4

1 回答 1

9

我不得不做一些额外的挖掘来弄清楚 C-types 是如何工作的,以下似乎是有效的。对于函数,我需要创建一个数组:

arg = (ctypes.POINTER(ctypes.c_double) * 1)()

并通过引用函数来传递它:

ctypes.byref(arg)

对于第二个函数,我只需传递我创建的数组的一个元素:

arg[0]
于 2012-12-11T13:30:41.303 回答