python调用C++,传递结构体与结构体指针,以及嵌套结构体

本文展示了如何在Python中通过ctypes库调用C++编译的动态链接库,传递包括基本类型、字符数组和嵌套结构体在内的结构体及结构体指针。示例中,C++定义了包含子结构体的`struct_def`结构体,并在Python中创建了对应的结构体类,成功实现了数据的交互和打印。
部署运行你感兴趣的模型镜像

#include<iostream>

using namespace std;

//该文件名称:cpptest.cpp

//终端下编译指令:

//g++ -o cpptest.so -shared -fPIC cpptest.cpp

struct sub_struct{

    char* test_char;

    int test_int;

};

struct struct_def {

    char* stru_string;

    int stru_int;

    char stru_arr_num[4];

    sub_struct son_struct;

};

extern "C"{//在extern “C”中的函数才能被外部调用

    int test(struct_def  struct_mystruct,struct_def* struct_test_p) {

        //输出结构体指针的数据

        cout<<"输出结构体中的char*字符:";

        cout << struct_mystruct.stru_string << endl;

        cout<<"输出结构体中的int型:";

        cout << struct_mystruct.stru_int <<endl;

        cout <<"输出结构体中的字符数组:";

        for(int x = 0;x< 4;x++){cout << struct_mystruct.stru_arr_num[x]<<"   ";}

        cout<< endl;

        cout<<"输出子结构体中的char*型:";

        cout << struct_mystruct.son_struct.test_char<<endl;

        cout<<"输出子结构体中的int型:";

        cout<<struct_mystruct.son_struct.test_int<<endl;

        //输出结构体指针的数据

        cout<<endl;

        cout<<endl;

         cout<<"输出结构体指针中的char*字符:";

        cout << struct_test_p->stru_string << endl;

        cout<<"输出结构体指针中的int型:";

        cout << struct_test_p->stru_int <<endl;

        cout <<"输出结构体指针中的字符数组:";

        for(int x = 0;x< 4;x++){cout << struct_test_p->stru_arr_num[x]<<"   ";}

        cout<< endl;

        cout<<"输出子结构体指针中的字符串:";

        cout<<struct_test_p->son_struct.test_char;

        cout << endl;

        cout<<"输出子结构体指针中的int型:";

        cout<<struct_test_p->son_struct.test_int<<endl;

    }

}

##python 文件

##文件名  pytest.py

import ctypes

mylib = ctypes.cdll.LoadLibrary("cpptest.so")

class sub_struct(ctypes.Structure):

    _fields_ = [

        ("test_char_p",ctypes.c_char_p),

        ("test_int",ctypes.c_int)

    ]

class struct_def(ctypes.Structure):

    _fields_ = [

        ("stru_string",ctypes.c_char_p),

        ("stru_int", ctypes.c_int),

        ("stru_arr_num", ctypes.c_char*4),

        ("son_struct", sub_struct)

    ]

struct_mystruct = struct_def()

struct_mystruct.stru_string = b"string in the struct"

struct_mystruct.stru_int = 99

struct_mystruct.stru_arr_num = b"ABCD"

struct_mystruct.son_struct.test_char_p =b"sub struct of the string"

struct_mystruct.son_struct.test_int = 10

mylib.test(struct_mystruct,ctypes.byref(struct_mystruct))

 


您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值