我想向我的c库发送一个对象数组。投射指向其他对象的数组?
我想发送的对象是一个pymunk Body.It有一个嵌入其中的指针对象Body._body
。我能够通过一个单一的功能,并提取花栗鼠功能任何我想要的。我用cpBodyGetMass
只是作为一个测试,工作。如果我制作了这些数组的数组。唯一有效的是第一个。
我希望能够将Body._body
地址作为数组发送到我的dll。我想我可以将指针存储在c_int
或c_long
阵列中,并将这些地址转换为Chipmunk想要的cpBody
。
这里是我的自定义功能
int pymunk_body(int color_id, int numof, float * values, cpBody * body){
glBindTexture(GL_TEXTURE_2D,0);
cpBody bd;
float red;
float green;
float blue;
float alpha;
float sizex;
float sizey;
cpVect position;
float positionx;
float positiony;
float rotation;
for (int i=0;i<numof*6;i=i+6){
bd=body[i/6];
red=values[0+i];
green=values[1+i];
blue=values[2+i];
alpha=values[3+i];
sizex=values[4+i];
sizey=values[5+i];
position=cpBodyGetPos(body);
positionx=position.x;
positiony=position.y;
rotation=cpBodyGetAngle(body)*180/PI;
}
我的C++有没有蟒蛇缠绕,所以我只能发送C对象。我一直在这样做的办法是...
gldll[4](ctypes.c_int(add_color),
ctypes.c_float(color[0]),
ctypes.c_float(color[1]),
ctypes.c_float(color[2]),
ctypes.c_float(color[3]),
ctypes.c_float(position[0]),
ctypes.c_float(position[1]),
ctypes.c_float(rotation),
ctypes.c_float(size[0]),
ctypes.c_float(size[1]))
和
ni=numpy.array([self.texture.TextureID,ublur,add_color,blurSize,self.Blur+blur,textfont],"i")
nf=numpy.array([(self.width+self.height)/2.0,color[0],color[1],color[2],color[3],position[0],position[1],rotation,self.half_width,self.half_height,scale],"f")
gldll[2](ctypes.c_void_p(ni.ctypes.data),ctypes.c_void_p(nf.ctypes.data))
现在,如果我送指针数组。基本上是一个4字节的数组。 cpBody body[]
假定它必须以字节为单位跳转数组中的sizeof(cpBody)以获取下一个对象。但他们不是内联的。它是一个随机指向所有机构的列表。我需要它读取每个数组元素中的地址,并假定在该位置有一个cpBody
。
如果你看看第二个例子。我通过一个指针发送了一个数组。我需要发送一个指针指向一个指针数组,并从每个指针获取cpBody。这意味着我需要该阵列只跳转4个字节并将内存地址作为cpBody
读取。
Awsome谢谢!我无法想出两个理由。我不知道C++中的**,我不知道你可以创建一个这样的指针数组。好极了。一个问题。什么'sys.path.insert(0,'..')'做 – Kaliber64 2013-03-05 02:02:48
这是让我的代码找到pymunk。我没有在我的标准python中安装pymunk。所以,path.insert将路径插入到我的本地pymunk文件夹中。在我的情况下,这只是一个文件夹(我在pymunk源代码树中的dump文件夹中有这个代码),但它可能是任何东西..例如,绝对路径在我的情况下是'sys.path.insert (0,'''c:\ svn \ pymunk \ trunk''')' – viblo 2013-03-05 09:58:14