你好,我正在嘗試創建一個簡單的C++ dll來在Excel中使用。在excel中使用C++ dll時沒有考慮到的參數
這裏是我做過什麼:
.cpp文件:
double _stdcall Test(double z)
{
return z+2.0;
}
DEF文件:
LIBRARY
EXPORTS
Test
在Visual Studio: 項目屬性>配置屬性>命令>「 Path/EXCEL.EXE「
配置管理器>平臺> x64
在VBA:
Declare PtrSafe Function Test Lib _
"Path\MyDLL" (ByVal z As Double) As Double
但是,當我打電話測試(2)在Excel中,它返回2,而不是4看起來說法被視爲0送花兒給人(其實如果我產值在調用該函數時在一個文件中,它是2.122e-314)。
任何輸入將不勝感激。
感謝
編輯1: 如果我改變參數和返回值INT與VBA龍,測試(2)返回3
任何人有一個想法,爲什麼參數爲1詮釋?
一切都適合我。您是否記得將模塊定義文件設置爲您的.def文件?這是什麼'項目屬性>配置屬性>命令>「路徑/ EXCEL.EXE」'。我沒有這樣的選擇。 – ly000
如果我不這樣做,我得到以下錯誤: 「路徑/ MyDLL.dll」不是有效的Win32應用程序。 事情是,def文件可能工作正常,因爲函數被調用,只是沒有考慮Excel參數 –
您的C++編譯器不知道該函數正在導出。所以它期望參數傳遞的方式不同,浮點是通過SSE指令完成的,參數通過XMM0寄存器傳遞。然而,Excel假定參數應該以傳統方式通過FPU寄存器ST0。把'__declspec(dllexport)'放在函數前面來解決這個問題。 –