python 调用C语言动态库 获取 C 文件中的结构体指针

本文介绍了一个C语言中定义的数据结构并通过Python的ctypes库进行操作的例子。首先在C文件中定义了一个名为Data的结构体,该结构体包含一个长整型ID和一个长度为10的长整型数组。接着实现了一个C函数getdata(),用于创建并初始化Data实例。在Python部分,使用ctypes加载了C语言的DLL,并定义了一个与C中Data结构体对应的Python类StructPointer。通过调用C函数getdata(),在Python中获取并打印了数据结构的内容。

在C文件中定义如下

typedef struct  
{
    long r_id;
    long data[10];       

} Data;

Data*getdata(){

    Data* r = (Data*)malloc(sizeof(Data));

    r->r_id = 123;

    int a[10] = {1,2,3,4,5}

    memcpy(r->data,a, sizeof(long) * 10);
    return r;
}

 

python 语言

 

import ctypes
dll = ctypes.cdll.LoadLibrary("cit_data.dll")
class StructPointer(ctypes.Structure):
  _fields_ = [("r_id", ctypes.c_long),
              ("data", ctypes.c_long) ]

dll.getdata.restype = ctypes.POINTER(StructPointer)

 p = dll.getdata()

print(p.contents.r_id)

print(p.contents.data)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值