ctypes引用双指针

Mac*_*Mac 6 python ctypes

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

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

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

WindowsError: exception: access violation writing 0x0000000000000000
Run Code Online (Sandbox Code Playgroud)

我可能在ctypes方面做错了什么,我会很感激如何使用它......

第二个DLL看起来像这样:

int function2(ClassD *  obj4)   
Run Code Online (Sandbox Code Playgroud)

目前我"汇集"了这样的最后3个参数:

  temp=ctypes.c_long*1
  obj = temp(0)
Run Code Online (Sandbox Code Playgroud)

还有,从ctypes到swig有什么办法吗?显然我可以使用long函数做相反的事情.

Mac*_*Mac 6

我不得不做一些额外的挖掘来弄清楚C类型是如何工作的,以下似乎可行.对于我需要创建一个数组的函数:

arg = (ctypes.POINTER(ctypes.c_double) * 1)()
Run Code Online (Sandbox Code Playgroud)

并通过引用传递给函数:

ctypes.byref(arg)
Run Code Online (Sandbox Code Playgroud)

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

arg[0]
Run Code Online (Sandbox Code Playgroud)

  • 哇,你回来2个月后回答了你的问题!荣幸和谢谢 (4认同)