ctypes和结构数组

时间:2014-09-15 03:04:08

标签: python c ctypes

我想使用ctypes和python读取C库中定义的结构数组。

C结构只是

struct particle {
  double x;
  double y;
}

我有一个函数返回一个指向结构数组的指针:

struct particle* getParticles();

在python中我定义了

class Particle(Structure):
    _field_ = [("x", c_double),("y", c_double)]

然后我试图从python中解析返回的指针,但似乎做错了什么:

getp = libparticles.getParticles
getp.restype = POINTER(Particle)
particles = getp()

particles的类型为LP_Particle,这似乎有道理。但是值(例如particles[0].x)是垃圾。

1 个答案:

答案 0 :(得分:2)

这是Windows DLL的一个工作示例,默认情况为" C"召集会议。如果没有完整的代码示例和错误示例,您就很难分辨出错误的地方。一个观察是_fields_在您的代码中拼写为_field_

C源

struct particle { double x,y; };

__declspec(dllexport) struct particle* getParticles()
{
    static struct particle p[3] = {1.1,2.2,3.3,4.4,5.5,6.6};
    return p;
}

的Python

from ctypes import *

class Particle(Structure):
    _fields_ = [("x", c_double),("y", c_double)]

getp = cdll.x.getParticles
getp.restype = POINTER(Particle)
particles = getp()
for i in range(3):
    print(particles[i].x,particles[i].y)

输出

1.1 2.2
3.3 4.4
5.5 6.6