我有一个。使用c++编写的dll extern "C" ,此函数称为BOLHA,并返回一个double。
extern "C"
问题是BOLHA有一个 vector<double> 在争论中。
vector<double>
extern "C" myDLL_API double BOLHA(vector<double> OI);
事实上,由于 外部“C” 我相信这个向量会变成指针,所以我尝试如下加载函数。
外部“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> 或者只使用原始指针。
BOLHA()
double*
如果您想让它与 向量(<双倍(>); 签名,您需要一些东西来完成将指针转换为向量的工作。 boost::python 可以做到这一点,但这需要使用的DLL是python模块,而不仅仅是任何DLL。
向量(<双倍(>);
boost::python
如果您具有以下功能:
您需要声明一个新函数:
extern "C" myDLL_API double BOLHA_raw(double* ptr, int size) { vector<double> v(ptr, ptr+size); return BOLHA(v); }