在 Python ctype 中从 C++ DLL 传递向量
passing vector from a c++ dll in python ctypes
我有一个用 c++ 编写的.dll,extern "C"
,这个函数称为 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
事实上,由于外置"C",我相信这个向量变成了一个指针
这是错误的。默认情况下,没有任何机制可以使这成为可能。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);
}
相关文章:
- 挂起和取消挂起一个文件DLL
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何通过派生类函数更改基类中的向量
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- DLL – 在 DLL 初始化时填充的静态向量,向客户端程序返回零大小
- 将字符串向量从 C# 传递到C++ DLL
- 在 Python ctype 中从 C++ DLL 传递向量
- 将std ::向量转换为阵列和当时的p/调用它会导致访问违规例外,在编组期间mscorlib.dll
- 从DLL访问向量
- 在从C++dll到Python的指针的向量上返回指针
- 如何在 Visual Studio 的 dll 导出类中使用唯一指针的向量
- 如何使用 mwArray 将字符串向量发送到 MATLAB 编译的 DLL
- 尝试从从 DLL 加载的驱动类实例访问基类向量成员时,程序崩溃