嘗試在 CPP 中創建 DLL 並在 Excel 中使用它時遇到以下問題。當參數到達 CPP 函數時,它保存的值會發生變化(無論它在 Excel 中是什麼)。我猜它在某個地方“掉落”,但我一直無法弄清楚。
這是代碼:
源文件
extern "C" double __stdcall my_double(double A)
{
return 2.0 * A;
}
源文件
LIBRARY
EXPORTS
my_double
VBA 代碼
Declare PtrSafe Function my_double Lib "C:\MyDir\Example.dll" (ByVal A As Double) As Double
然後當我my_double
從 excel調用時,它總是返回 0.0。
我在函數上附加了一個調試點,當它到達 cpp 函數時,我可以看到該值確實為 0。任何有關如何調試此問題的提示將不勝感激!
到目前為止我嘗試過但沒有成功的事情:
ByVal
,ByRef
但兩者都不使用。int
而不是double
。DUMPBIN
了我創建的 DLL 文件,它看起來不錯。Excel 將難以使用直接從 dll 入口點聲明的函數,因為它不知道參數的類型(以及其他事情,例如如何管理返回值的內存)。教程中的 OP 方法可能在過去有效,但似乎不再有效。
創建 VBA 用戶定義函數 (UDF) 包裝器可以解決這個問題,因為 Excel 知道在這種情況下如何處理和編組參數:
Private Declare PtrSafe Function my_double Lib "C:\Users\david\source\repos\CppTests\x64\Release\DllForExcel.dll" (ByVal A As Double) As Double
Public Function MyDouble(d As Double) As Double
MyDouble = my_double(d)
End Function
使用MyDouble()
電子表格中的函數。
另一種解決方案是沿著創建已編譯 Xll(通常使用 Excel SDK)的路線走下去,它具有註冊函數及其參數的入口點,以及管理內存分配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句