我试图将一个用VBA编写的处理程序中的两个双数组传递到用C ++编写的DLL中,并且我一直收到一条错误,指出它超出了数组的范围。这些数组包含800个双精度值,我需要使用FFT计算两个数组之间的相关性
VBA代码中的函数调用:
Dim firstDataDbl() As Double = Array.ConvertAll(firstData, Function(d) Double.Parse(d))
Dim secondDataDbl() As Double = Array.ConvertAll(secondData, Function(d) Double.Parse(d))
rdftTest(UBound(firstDataDbl) + 1, firstDataDbl(0), secondDataDbl(0))
VB中DLL函数的定义:
Public Module DLLTest
<DllImport("FFT.dll", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)>
Function rdftTest(ByVal length As Integer, ByRef firstDataDblFirstElement As Double, ByRef secondDataDblFirstElement As Double) As Integer
End Function
End Module
函数,写在C ++ DLL中:
void rdftTest(int length, double *input1, double *input2) {
std::ofstream myFile;
myFile.open("C:\\randFolder\\foo.txt", std::ios::out);
myFile << length << " " << &input1 << " " << &input2 << std::endl;
}
两个数组总是长度相等,这就是为什么我只使用一个长度参数。
答案 0 :(得分:0)
我通过将UBound(firstDataDbl) + 1
解析为Integer然后在函数中传递了该值来解决了这个问题