频道栏目
首页 > 程序开发 > Web开发 > Python > 正文
Python Ctypes结构体指针处理(函数参数,函数返回)
2011-09-30 14:58:08           
收藏   我要投稿

C函数需要传递结构体指针是常事,但是和Python交互就有点麻烦事了,经过研究也可以了。
<结构体指针作为函数参数>
来看下C测试例子:
view plainprint?
#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):
view plainprint?
from ctypes import * 
class StructPointerTest(Structure):  
    _fields_ =[('x', c_int), 
               ('y', c_int)] 

Usage:
view plainprint?
##Structure Pointer Operation 
SPTobj = pointer(StructPointerTest(1, 2)) 
print SPTobj 
print SPTobj.contents.x  
print SPTobj.contents.y 

<函数返回结构体指针>
C函数测试例子改成如下:
view plainprint?
StructPointer test() { 
        StructPointer p = (StructPointer)malloc(sizeof(struct StructPointerTest)); 
        p->x = 101; 
        p->y = 201; 
        return p; 

Python程序处理如下:
view plainprint?
from ctypes import * 
class StructPointer(Structure): 
        pass 
 
StructPointer._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 C int type. Other return types can be specified by setting the restype attribute of the function object.

作者“Crazybaby's blog”

点击复制链接 与好友分享!回本站首页
上一篇:learn python the hard way_exercise 9
下一篇:Python 批量域名反查
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站