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