python调用c/c++时传递结构体参数


背景:使用python调用linux的动态库SO文件,并调用里边的c函数,向里边传递结构体参数。直接上代码

//test1.c

# include <stdio.h> # include <stdlib.h> //创建一个Student结构体 struct Student { char name[30]; float fScore[3]; }; void Display(struct Student su) { printf("-----Information------\n"); printf("Name:%s\n",su.name); printf("Chinese:%.2f\n",su.fScore[0]); printf("Math:%.2f\n",su.fScore[1]); printf("English:%.2f\n",su.fScore[2]); printf("总分数为:%f\n", su.fScore[0]+su.fScore[1]+su.fScore[2]); printf("平均分数为:%.2f\n",((su.fScore[0]+su.fScore[1]+su.fScore[2]))/3); }

生成libpycall.so文件:

gcc -o libpycall.so -shared -fPIC test1.c

python调用,给Display传递结构体参数:

#pycall.py

import
ctypes from ctypes import * class Student(Structure): _fields_ = [("name",c_char * 30), ("fScore", c_float * 3) ] su = Student() su.name = b"test-sdk" PARAM = c_float * 3 fScore = PARAM() fScore[0] = 55.1 fScore[1] = 33.2 fScore[2] = 51.3 su.fScore = fScore if __name__ == '__main__': ll = ctypes.cdll.LoadLibrary lib = ll("./libpycall.so") # lib.Display.restype = c_float lib.Display.argtypes = [Student] #这一行很重要 lib.Display(su) print('----- finish -----')

输出Display函数调用结果:

-----Information------
Name:test-sdk
Chinese:55.10
Math:33.20
English:51.30
总分数为:139.600006
平均分数为:46.53
----- finish -----

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM