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

来源:互联网 发布:匈牙利算法步骤 编辑:程序博客网 时间:2024/06/06 05:18

参考网址: http://www.2cto.com/kf/201109/106444.html


本文演示了在python中调用C语言生成的动态库,返回结构体指针,并进行输出!


test.c(动态库源代码)

// 编译生成动态库: gcc -g -fPIC -shared -o libtest.so test.c#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct StructPointerTest{char name[20];int age;}StructPointerTest, *StructPointer;StructPointer test()// 返回结构体指针{ StructPointer p = (StructPointer)malloc(sizeof(StructPointerTest)); strcpy(p->name, "Joe");p->age = 20;return p; }

编译gcc -g -fPIC -shared -o libtest.so test.c


call.py(python调用C语言生成的动态库):

#!/bin/env python# coding=UTF-8from ctypes import *#python中结构体定义class StructPointer(Structure):_fields_ = [("name", c_char * 20), ("age", c_int)]if __name__ == "__main__":lib = cdll.LoadLibrary("./libtest.so")lib.test.restype = POINTER(StructPointer)p = lib.test()print "%s: %d" %(p.contents.name, p.contents.age)

最后运行结果:

[zcm@c_py #112]$make cleanrm -f *.o libtest.so[zcm@c_py #113]$makegcc -g -fPIC -shared -o libtest.so test.c[zcm@c_py #114]$./call.py Joe: 20[zcm@c_py #115]$





原创粉丝点击