Excel中的C函数不能用作工作表函数,但在VBA中运行良好

我正在写一个64位的Dll,然后在Excel中使用64位,我正在从https://sites.google.com/site/jrlhost/links/excelcdll下面的示例项目。

这个例子很简单。 我们在C中写一个函数,它返回一个input的平方值。 该函数被导出到DLL中,然后在Excel 64位中使用。

我正面临与例子完​​全相同的问题:

“但是,当您使用squareForEXL作为工作表函数,它会导致错误。在我的桌面上,它返回正确的结果(例如,”= squareForEXL(10)“产生100),但是,然后给出”超出堆栈空间“错误,或者在调用函数的时候或者Excelclosures的时候,在我的笔记本电脑上,它会返回一个不正确的结果(例如,“= squareForEXL(10)”会得到0),Excel有时会崩溃。

C函数(squareForEXL)在VBA中使用时工作正常,但不能用作工作表函数。 文章提出了一个解决方法,但我仍然想看看是否有任何方法可以直接解决问题。

以下是C和VBA代码:

double _stdcall squareForEXL (double *x) { return *x * *x; } Declare PtrSafe Function squareForEXL Lib "C:\Working\XLSquare\x64\Debug\XLSquare.dll" (ByRef x As Double) As Double 

您需要传递对示例中给出的squareForExl的引用。 那是你需要的,

 double _stdcall squareForEXL (double &x) { return x * x; }