Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ctypes引用双指针_Python_Ctypes - Fatal编程技术网

Python ctypes引用双指针

Python ctypes引用双指针,python,ctypes,Python,Ctypes,我有一个C函数,该函数的强氧值如下所示: long function( classA * obj1, classB * obj2, classC ** obj3, long value, const char * name1, const char * name2, classD ** obj4,

我有一个C函数,该函数的强氧值如下所示:

long function( classA * obj1,
               classB * obj2,
               classC ** obj3,
               long value,
               const char * name1,
               const char * name2,
               classD ** obj4,
               classD ** obj5,
               classD ** obj6 
               )    
WindowsError: exception: access violation writing 0x0000000000000000
int function2(ClassD *  obj4)   
  temp=ctypes.c_long*1
  obj = temp(0)
我需要从python调用它,并获取最后3个参数以传递给另一个dll。目前我可以很好地调用DLL,但如果我尝试将最后3个参数传递给另一个函数,则会出现如下错误:

long function( classA * obj1,
               classB * obj2,
               classC ** obj3,
               long value,
               const char * name1,
               const char * name2,
               classD ** obj4,
               classD ** obj5,
               classD ** obj6 
               )    
WindowsError: exception: access violation writing 0x0000000000000000
int function2(ClassD *  obj4)   
  temp=ctypes.c_long*1
  obj = temp(0)
我可能在ctypes方面做了一些错误的事情,我希望能了解如何使用它

第二个DLL如下所示:

long function( classA * obj1,
               classB * obj2,
               classC ** obj3,
               long value,
               const char * name1,
               const char * name2,
               classD ** obj4,
               classD ** obj5,
               classD ** obj6 
               )    
WindowsError: exception: access violation writing 0x0000000000000000
int function2(ClassD *  obj4)   
  temp=ctypes.c_long*1
  obj = temp(0)
目前,我“汇编”了最后3个参数,如下所示:

long function( classA * obj1,
               classB * obj2,
               classC ** obj3,
               long value,
               const char * name1,
               const char * name2,
               classD ** obj4,
               classD ** obj5,
               classD ** obj6 
               )    
WindowsError: exception: access violation writing 0x0000000000000000
int function2(ClassD *  obj4)   
  temp=ctypes.c_long*1
  obj = temp(0)

还有,有没有办法从ctypes变成swig?显然,我可以用另一种方法来使用long函数。

我必须做一些额外的挖掘,以了解C-types是如何工作的,下面的内容似乎也可以。对于创建数组所需的函数:

arg = (ctypes.POINTER(ctypes.c_double) * 1)()
并通过引用将其传递给函数:

ctypes.byref(arg)
对于第二个函数,我只需传递我创建的数组的一个元素:

arg[0]

哇,两个月后你回来回答了你的问题!荣誉与感谢