Python 在Ctypes中定义参数类型并将参数传递给C DLL

Python 在Ctypes中定义参数类型并将参数传递给C DLL,python,c,dll,arguments,ctypes,Python,C,Dll,Arguments,Ctypes,我不熟悉Python、Ctypes,对C语言知之甚少。 我在MATLAB中定义了一个函数。以下是函数及其参数: function Out = Read_clipboard (im, num1,num2,num3,num4) im:array(500 x 500 x 3)unit8(这是一幅图像) num1:双 num2:双倍 num3:双倍 num4:双 输出:(1x2000)双精度(类似于matlab中的[123445…..2000] . 我使用了MATLAB编码器,并成功地将我的函数转换

我不熟悉Python、Ctypes,对C语言知之甚少。 我在MATLAB中定义了一个函数。以下是函数及其参数:

function Out = Read_clipboard (im, num1,num2,num3,num4)
im:array(500 x 500 x 3)unit8(这是一幅图像)

num1:双

num2:双倍

num3:双倍

num4:双

输出:(1x2000)双精度(类似于matlab中的[123445…..2000] .

我使用了MATLAB编码器,并成功地将我的函数转换为MEX,效果很好

我还使用了MATLAB编码器,并将我的函数转换为C DLL。我使用已经安装在WIN7-64上的“minGW编译器”成功地将MATLAB代码编译成CDLL

现在我想在Python IDE中使用生成的C DLL来实现比MATLAB运行更快的运行。我使用Ctypes,我的Python代码是:

from ctypes import windll 
from ctypes import *
import cv2
im = cv2.imread('b0.jpg',1)
mylib = windll["Read_clipboard.dll"]
my_func=getattr(mylib,'Read_clipboard')
my_func.restype = ????
my_func.argtypes=[???,c_double,c_double,c_double,c_double]
output = my_func(im,100,2000,30/255,30))
现在我不知道如何定义输入和输出参数的类型,以便C DLL中的函数可以在python中工作。MATLAB编码器也为我的函数生成了C代码。头文件(.h扩展名)中的“函数声明”如下所示:

  /* Function Declarations */
extern void Read_clipboard(const unsigned char im[750000], double
  num1, double num2, double num3, double num4,
  emxArray_real_T *Out);

#endif
我应该如何在python中定义输入和输出的类型并将它们传递给DLL


非常感谢

C++和C不是同一种语言。Ctypes是链接C代码的。但我认为MATLAB编码器产生C代码,所以你们应该很好。你只需要你的问题使用C标签,而不是混淆它与C++。亲爱的Cris非常感谢你的回应。在Matlab编码器中生成DLL时,C和C++都有选择。我选择C++是因为我认为它比C快,但我不确定。我还曾经生成过C代码和C DLL。一个区别是每个DLL类型中的函数名。在C DLL函数中有原始名称,并且在C++ DLL名称中更改了一些随机字符添加到原始名称中。所以你说Python中的cType只能用C DLL类型工作,而不是用C++ DLL工作。我得用谷歌查一下。非常感谢您的帮助。C++函数的名称(以便它们可以重载)。这种限制对于C++是唯一的(在不同的平台和编译器上是不同的),因此使得其他语言无法链接到C++库(除非这些语言对C++有非常具体的支持)。另一方面,C是DLL的默认和标准,任何允许链接到DLL的语言都可以链接到C DLL。如果DLL附带头文件(.h扩展名),它将告诉您函数参数的类型。有用的要点。幸运的是,我已经成功地生成了DLL的C版本。我编辑我的问题,使用C标签代替C++。谢谢