社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

小鱼叉

小鱼叉 最近创建的主题
小鱼叉 最近回复了
8 年前
回复了 小鱼叉 创建的主题 » python 调用dll怎么返回多个值

调用函数代码如下--->

import scipy.io as scio import os import ctypes import datetime import numpy as np

读取dll文件

这里的地址目录是HessianFilter.dll所在的文件夹

start = datetime.datetime.now() cur_path = os.path.dirname(r'C:\Users\Administrator\Desktop\code_and_data\code\HessianFilter\') dll_path = os.path.join(cur_path,'HessianFilter.dll') print dll_path dll = ctypes.windll.LoadLibrary(dll_path)

读取mat文件,Mat文件所在的文件夹中读取

matPath = r'C:\Users\Administrator\Desktop\code_and_data\data\Nodule19664.mat' imgData = scio.loadmat(matPath)

从mat文件中我们取到了整个三维数组

imgDataArray = imgData['imagetest1']

得到数组文件的参数:宽,高,层数

widthSrc,heightSrc,sliceNumSrc = imgDataArray.shape

声明一个三维的c_float类型的数组,用于存放mat数据,并将数据转化为c_float

imgDataArray_p = (((ctypes.c_floatsliceNumSrc)heightSrc)*widthSrc)()

for i in range(widthSrc): for j in range(heightSrc): for k in range(sliceNumSrc): imgDataArray_p[i][j][k] = ctypes.c_float(imgDataArray[i][j][k])

imgDataP = ctypes.POINTER(ctypes.c_float)(imgDataArray_p) print '---------->'

需要再声明两个返回值

HessianDot = (ctypes.c_float(widthSrcheightSrcsliceNumSrc))() HessianLine = (ctypes.c_float(widthSrcheightSrcsliceNumSrc))()

HessianDot_p = ctypes.POINTER(ctypes.c_float)(HessianDot) HessianLine_p = ctypes.POINTER(ctypes.c_float)(HessianLine)

定义一个常数

sigma = ctypes.c_float(8)

定义一个三维数组

imgSize = [widthSrc,heightSrc,sliceNumSrc] imageSize = (ctypes.c_floatlen(imgSize))(imgSize)

定义一个指向三维数组的指针

imageSizeP = ctypes.POINTER(ctypes.c_float)(imageSize)

这个就是调用dll中的函数了

dll.RunHessianMultiThread(ctypes.byref(imgDataArray_p),sigma,ctypes.byref(imageSizeP),ctypes.byref(HessianDot_p),ctypes.byref(HessianLine_p),4) print '--调用后-点数据--' print HessianDot_p print HessianDot_p[0:24]

print HessianDot_p.contents

print '--调用后-线数据--' print HessianLine_p print HessianLine_p[0:24]

print HessianLine_p.contents

print '<---------Over------------->\n\n' print datetime.datetime.now()-start