C++ VBA Excel DLL参数问题-第6个参数

C++ VBA Excel DLL参数问题-第6个参数,c++,vba,excel,dll,C++,Vba,Excel,Dll,我有一个VBA代码,它调用DLL代码。DLL代码工作正常,VBA代码工作正常,直到我从VBA调用DLL函数为止。由于某些原因,它没有正确地传递第6个参数。我通过添加第7个参数并在第6个和第7个参数中传递相同的值来进行测试-第7个参数传递的值很好,第6个参数传递的值很大(不正确)。我不知道发生了什么事 VBA: DLL函数声明: int __stdcall GenerateCUDALMMPaths(double* arrTimes, double* arrRates, double* arrVol

我有一个VBA代码,它调用DLL代码。DLL代码工作正常,VBA代码工作正常,直到我从VBA调用DLL函数为止。由于某些原因,它没有正确地传递第6个参数。我通过添加第7个参数并在第6个和第7个参数中传递相同的值来进行测试-第7个参数传递的值很好,第6个参数传递的值很大(不正确)。我不知道发生了什么事

VBA:

DLL函数声明:

int __stdcall GenerateCUDALMMPaths(double* arrTimes, double* arrRates, double* arrVols, double* retData, int& ArrLength, int& NPaths);
DEF文件:

LIBRARY "CUDAFinance"
EXPORTS
    CheckExcelArray = CheckExcelArray
    GenerateLMMPaths = GenerateLMMPaths
    GenerateCUDALMMPaths = GenerateCUDALMMPaths

有人知道吗?我完全迷路了。

我刚刚遇到了同样的问题,并按如下方式解决了它

由于在six arguments函数中已有一个长变量,请将NPATH与Arrlen一起作为数组导入,而不添加第7个参数:

1) 在VBA中:

声明一个两元素数组:

变暗Narrlenn路径(1)与长度相同

然后,分配值:

NarrlenPath(0)包含ArrLen和NarrlenPath(1)的NPATH值

将函数delcaration保留在VBA中,但调用时将NarrlenPath(0)作为第6个参数。不要提出第七个论点。C++将将两个值都重新整理如下:

2)C++中使用指针代替:

将第6个参数更改为

int*narrlenn路径

然后通过

int-NArrLen=narrlenpath[0]


int npath=narrlenpath[1]

你能给出传递值的例子吗?也许这会起作用,
np=CLng(Sheets(“LMM”).Range(“C2”).Value)
我认为你需要传递“ByVal”而不是“ByRef”,这样可能会有所帮助,但我想你已经在前面的问题中说过了。。。。我在往上看。另外,您在哪里看到出现了较大的错误值?调试dll,还是在VBA中的某个地方?当您说您添加了第7个参数并传递了与第6个参数相同的值时,您是如何做到这一点的?您是在VBA中创建了另一个变量并将其设置为单元格的值,还是在使用
sz
时对其进行了硬编码?我想不出一个原因,但我想知道是否将NPaths参数的变量设置为单元格值会拖累其他内容。下面是VS2012中添加了第7个参数的调试截图。和
LIBRARY "CUDAFinance"
EXPORTS
    CheckExcelArray = CheckExcelArray
    GenerateLMMPaths = GenerateLMMPaths
    GenerateCUDALMMPaths = GenerateCUDALMMPaths