从 python ctypes 中的 c++ dll 传递向量
passing vector from a c++ dll in python ctypes
我有一个用 extern "C"
用 c++ 编写的 .dll,此函数称为 BOLHA,returns 是一个双精度函数。
问题是 BOLHA 在参数中有一个 vector<double>
。
extern "C" myDLL_API double BOLHA(vector<double> OI);
实际上由于 extern "C"
我相信这个向量变成了一个指针,所以我尝试按如下方式加载函数。
mydll = cdll.LoadLibrary("_DLL.dll")
func = mydll.BOLHA
func.argtypes = [POINTER(c_double)]
func.restype = c_double
returnarray = (c_double * 2)(0.047948, 0.005994)
func(returnarray)
但我收到以下错误。
[Error -529697949] Windows Error 0xE06D7363
in fact due the extern "C" I believe that this vector turns into a pointer
这是错误的。默认情况下没有使这成为可能的机制。
您的 BOLHA()
函数需要接收一个 double*
然后将其转换为 vector<double>
或者只使用原始指针。
如果你想让它与 vector<double>
签名一起使用,你需要一些东西来完成将指针转换为向量的工作。 boost::python
可以做到这一点,但这需要您正在使用的 DLL 是一个 python 模块,而不仅仅是任何 DLL。
如果你有这个功能:
extern "C" myDLL_API double BOLHA(vector<double> OI);
您需要声明一个新函数:
extern "C" myDLL_API double BOLHA_raw(double* ptr, int size) {
vector<double> v(ptr, ptr+size);
return BOLHA(v);
}
我有一个用 extern "C"
用 c++ 编写的 .dll,此函数称为 BOLHA,returns 是一个双精度函数。
问题是 BOLHA 在参数中有一个 vector<double>
。
extern "C" myDLL_API double BOLHA(vector<double> OI);
实际上由于 extern "C"
我相信这个向量变成了一个指针,所以我尝试按如下方式加载函数。
mydll = cdll.LoadLibrary("_DLL.dll")
func = mydll.BOLHA
func.argtypes = [POINTER(c_double)]
func.restype = c_double
returnarray = (c_double * 2)(0.047948, 0.005994)
func(returnarray)
但我收到以下错误。
[Error -529697949] Windows Error 0xE06D7363
in fact due the extern "C" I believe that this vector turns into a pointer
这是错误的。默认情况下没有使这成为可能的机制。
您的 BOLHA()
函数需要接收一个 double*
然后将其转换为 vector<double>
或者只使用原始指针。
如果你想让它与 vector<double>
签名一起使用,你需要一些东西来完成将指针转换为向量的工作。 boost::python
可以做到这一点,但这需要您正在使用的 DLL 是一个 python 模块,而不仅仅是任何 DLL。
如果你有这个功能:
extern "C" myDLL_API double BOLHA(vector<double> OI);
您需要声明一个新函数:
extern "C" myDLL_API double BOLHA_raw(double* ptr, int size) {
vector<double> v(ptr, ptr+size);
return BOLHA(v);
}