zoukankan      html  css  js  c++  java
  • 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 -----
  • 相关阅读:
    三维dem
    geoserver 通过代码实现发布地图服务
    restful发布服务
    php防攻击
    redis主从复制
    redis虚拟内存
    redis 持久化
    lamp源码安装
    mysql优化
    php匿名函数与闭包函数
  • 原文地址:https://www.cnblogs.com/pyse/p/8590829.html
Copyright © 2011-2022 走看看