Python调用C++动态链接库返回数组
Windows下Python调用dll的教程网上有很多,包括返回常规变量和结构体变量的方法,但是返回数组的相关文章很少,这里通过一个简单的例子介绍通过ctypes模块调用dll返回数组的方法。
在test.cpp文件中添加如下测试函数:
float* ctest(float a) { static float x[3]; // 返回的数组必须是全局变量或者静态变量 x[0] = a; x[1] = a * a; x[2] = a * a * a; return x; }
用VS或者其他工具编译生成test.dll,创建test.py文件链接C函数和python函数:
import ctypes funtest = ctypes.cdll.LoadLibrary('./test.dll') # dll文件与py文件在同一目录下 funtest.ctest.restype = ctypes.POINTER(ctypes.c_float*3) # 设置返回值为指向3个float数据的指针 class cfun(object): def __init__(self): pass def ctest(self, a): return funtest.ctest(ctypes.c_float(a)) # 将实参转换为C语言中的类型
在main.py中导入test中的函数cfun类并实例化,调用ctest函数进行验证:
from test import cfun c = cfun() pfloat = c.ctest(1.2) print(pfloat.contents[0]) print(pfloat.contents[1]) print(pfloat.contents[2]) ''' 输出: 1.2000000476837158 1.440000057220459 1.7280001640319824 '''