将双精度数组从Visual Basic传递到C ++ DLL

时间:2016-02-18 08:50:08

标签: c++ vb.net visual-studio-2015

我试图将一个用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;
}

两个数组总是长度相等,这就是为什么我只使用一个长度参数。

1 个答案:

答案 0 :(得分:0)

我通过将UBound(firstDataDbl) + 1解析为Integer然后在函数中传递了该值来解决了这个问题