FXMAR 发表于 2017-5-3 12:19:32

Python Ctypes 结构体指针处理(函数参数,函数返回)

  C函数需要传递结构体指针是常事,但是和Python交互就有点麻烦事了,经过研究也可以了。
  <结构体指针作为函数参数>
  来看下C测试例子:
#include <stdio.h>typedef struct StructPointerTest* StructPointer;struct StructPointerTest{int x;int y;};void test(StructPointer p) {p->x = 101;p->y = 201;}  

这里test里面需要传入结构体指针,函数中的实现很简单,就是改变x 和 y 的值这个函数将被python调用。  使用Python调用时,需要模拟申明个结构体(class):
from ctypes import *class StructPointerTest(Structure): _fields_ =[('x', c_int),('y', c_int)]
  Usage:
##Structure Pointer OperationSPTobj = pointer(StructPointerTest(1, 2))print SPTobjprint SPTobj.contents.x print SPTobj.contents.y
  <函数返回结构体指针>
  C函数测试例子改成如下:
StructPointer test() {StructPointer p = (StructPointer)malloc(sizeof(struct StructPointerTest));p->x = 101;p->y = 201;return p;}  

  Python程序处理如下:
from ctypes import *class StructPointer(Structure):passStructPointer._fields_=[('x', c_int),('y', c_int),('next', POINTER(StructPointer))]lib = cdll.LoadLibrary('./StructPointer.so')lib.test.restype = POINTER(StructPointer)p = lib.test()print p.contents.x
关于resttype可以参见 Tutorial :By default functions are assumed to return the Cinttype.Other return types can be specified by setting therestypeattributeof the function object.
页: [1]
查看完整版本: Python Ctypes 结构体指针处理(函数参数,函数返回)