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

参考网址: 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-8

from 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 clean
rm -f *.o libtest.so
[zcm@c_py #113]$make
gcc -g -fPIC -shared -o libtest.so test.c
[zcm@c_py #114]$./call.py 
Joe: 20
[zcm@c_py #115]$





展开阅读全文

没有更多推荐了,返回首页