python通过ctypes调用C++ DLL过程中返回值的指定和结构体数组的使用

本文介绍了在Python中使用ctypes库调用C++ DLL时如何处理返回值,特别是char *类型字符串的转换,以及结构体、结构体指针和结构体数组的使用方法。内容包括C++接口导出、字符串返回值解析以及结构体数组的参数传递和返回值解析。
摘要由CSDN通过智能技术生成

在做自动化测试的过程中,我需要使用python调用C++的SDK,完成接口测试的工作。由于团队只提供了C++的SDK源码,所以我需要做下面几件事:

  1. 封装C++的接口,进行接口的导出
  2. 打包为DLL,动态链接库
  3. 使用ctypes库,调用dll,完成测试

网上关于python通过ctypes调用C++动态链接库的教程非常多,我就不再写了,这里就写一下我在使用过程中遇到的两个问题:

  1. 接口返回为应字符串,C++代码中声明为char *,如何在python中获取字符串的返回值?
  2. 参数中有结构体,返回值是结构体,返回值或参数中有结构体数组的时候在python中如何传值和解析返回值?

C++接口导出

在看问题之前,我们顺便带一下C++代码如何封装。作为测试人员,我拿到的是C++的源码,要使用python调用它,首先我需要先导出我要测试的接口。为了让导出接口的代码不与SDK源代码混在一起,我们需要在项目中新建一个export.cpp专门用于导出,这样便于在git上与开发人员一起协同工作,互不干扰。
在这里插入图片描述
这个文件的内容,就是导出接口,这里直接看个例子,不做过多解释了

extern "C" __declsp
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python 调用 C++ DLL,你可以使用 ctypes 库来实现。在定义传入和返回值时,需要注意以下几点: 1. 确定函数名字和所在库的路径。 2. 确定函数的参数类型和返回值类型,如 int、float、double、char* 等。你可以使用 ctypes.c_int、ctypes.c_float、ctypes.c_double、ctypes.c_char_p 等 ctypes 提供的类型来表示 C++ 的数据类型。 3. 为函数指定参数类型和返回值类型。你可以使用 `ctypes.cdll.LoadLibrary()` 加载动态链接库,然后使用 `dll.func.argtypes` 和 `dll.func.restype` 来设置参数类型和返回值类型。 下面是一个简单的示例代码,用于调用 C++ DLL 的 `add` 函数,该函数接受两个整型参数,返回它们的和。 ```python import ctypes # 加载动态链接库 dll = ctypes.cdll.LoadLibrary("path/to/dll") # 指定函数名和参数类型、返回值类型 add_func = dll.add add_func.argtypes = [ctypes.c_int, ctypes.c_int] add_func.restype = ctypes.c_int # 调用函数并输出结果 a = 10 b = 20 result = add_func(a, b) print(f"{a} + {b} = {result}") ``` 在这个示例,我们使用 `ctypes.cdll.LoadLibrary()` 加载了一个名为 `dll` 的动态链接库。然后,我们使用 `dll.add` 来指定调用的函数名字。接下来,我们使用 `add_func.argtypes` 来指定该函数的参数类型,即两个整型参数。最后,我们使用 `add_func.restype` 来指定该函数的返回值类型,即一个整型值。最后,我们调用 `add_func(a, b)` 来执行该函数,并将结果赋值给 `result` 变量。最后,我们输出运算结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值