关于python调用C++所形成的dll文件中的以指针为返回值的函数

关于python调用C++所形成的dll文件中的以指针为返回值的函数

#写在前面
作为一个编程小白,最近在做毕业设计需要用到前人写好的C++程序,而且这个C++程序里的函数是以数组指针作为返回值,而我用的是python,一时之间竟然不知道该怎么办。
在找寻了一些资料后找到了下面的解决方法。
#正文
假设原来的C++函数API接口提示如下:

float* function(float array[3])

这个API需要传入一个float型的数组,并返回一个指针。
在python进行了ctypes.cdll.loadliborary()载入dll操作后,可以在python中建立一个数组(?老实讲,我还是不太能理解python“一切均是(残缺的)指针”的说法)

class array(Structure):
		_fields_ = [('a',c_float),
		            ('b',c_float),
		            ('c',c_float)]
A = array(0,1,2)
#死记硬背,直接理解为了python中建立数组的一个方法
#仅仅建立数组后,还需要对调用的函数的输入与输出格式进行调整
#调整的方法是调用一个函数
def fillprototype(f,restype,argtypes):
    f.restype = restype
    f.argtypes = argtypes
   
test=ctypes.cdll.LoadLibrary("./xxxxx.dll")#导入dll文件 
fillprototype(test.function,ctypes.POINTER(ctypes.c_float)[ctypes.POINTER(array)])

test_address_value =  test.function(A)

for i in range(3):
	print(test_address_value[i])
	i += 1

python的ctypes文档中说argtypes现在已经不需要追寻ctypes中的固定形式,但是如果直接写成:

fillprototype(test.function,ctypes.POINTER(ctypes.c_float)[ctypes.POINTER(c_float*3())])

这样的话会报出_from_pragma_的错误。因此这也是必须在开头进行

class array(Structure)

这一定义的原因。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值