我想使用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
)是垃圾。
答案 0 :(得分:2)
这是Windows DLL的一个工作示例,默认情况为" C"召集会议。如果没有完整的代码示例和错误示例,您就很难分辨出错误的地方。一个观察是_fields_
在您的代码中拼写为_field_
。
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;
}
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