更改C+中vba数组的大小+; 我在Excel中有一个VBA宏,它调用C++编写的DLL。此DLL中的函数向宏返回一个数组,然后将该数组放入Excel工作表中

更改C+中vba数组的大小+; 我在Excel中有一个VBA宏,它调用C++编写的DLL。此DLL中的函数向宏返回一个数组,然后将该数组放入Excel工作表中,c++,arrays,vba,excel,C++,Arrays,Vba,Excel,VBA宏: Private Declare Function arrayTestEXL Lib "C:\Path\To\Lib\calcDLL.dll" (ByRef testArray As Double) As Long Sub testArrayTest() Dim testArray(0, 9) As Double Dim rngResults As Range Dim errorCode As Integer errorCode = arrayTestEXL(testArray(0,

VBA宏:

Private Declare Function arrayTestEXL Lib "C:\Path\To\Lib\calcDLL.dll" (ByRef testArray As Double) As Long
Sub testArrayTest()
Dim testArray(0, 9) As Double
Dim rngResults As Range
Dim errorCode As Integer

errorCode = arrayTestEXL(testArray(0, 0))
Set rngResults = Range(Cells(4, 4), Cells(4, 13))
rngResults.Value = testArray

End Sub
<>和C++代码是:

int _stdcall arrayTest(double* testArray)
{
    for (int i = 0; i < 10; i++)
        testArray[i] = i;
    return 0;
}

对于函数(显然是在循环之前),当将所有值放入Excel时,它们会突然变为0。

这是因为通过为testArray分配一个新分配的内存地址,您正在丢失testArray指向的内存。由于缓冲区是由调用方提供给函数的,因此您应该增加调用方站点的数组大小,并将该缓冲区的大小作为arrayTest方法的第二个参数提供。@SelçukCihan这很有意义。非常感谢。
testArray = (double*) malloc(10 * sizeof(double))