創建 DLL 並從 Excel 中使用它

丹尼

嘗試在 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。任何有關如何調試此問題的提示將不勝感激!

到目前為止我嘗試過但沒有成功的事情:

  • 確保 excel 上的位和 CPP 中的構建匹配(均為 x64)。
  • 嘗試使用發布模式和調試模式。
  • 嘗試使用 和更改 VBA 代碼ByValByRef但兩者都不使用。
  • 嘗試了一個更簡單的例子,使用int而不是double
  • 我檢查DUMPBIN了我創建的 DLL 文件,它看起來不錯。
  • 我正在關注本教程:https : //personalpages.manchester.ac.uk/staff/Andrew.Hazel/EXCEL_C++.pdf(第 54 頁)
DS_倫敦

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用因子變量從不同的 Excel 工作表創建數據框

我可以創建一個超級用戶並在多個 Django 項目中使用它嗎?

RxJS:使用 groupBy 並從值創建鍵/值對

如何使用 JavaScript 創建 html 元素並為其創建 class/id

只創建一次字典 - 並在調用字典時使用它?

使用列表和數據框從 a 創建字典

解析嵌套的 JSON 並使用 jq 創建新的鍵

如何從 ReactJS 上使用 useState 鉤子創建的狀態變量創建靜態變量?

Python/Pandas/Excel 從 3 列創建一個二維數組

如何在python中從excel創建多列字典?

如何使用 Google Apps 腳本從 JSON 創建數組並將值導入到 Google 表格中的多行

在 df2 中從 df1 中找到“Guest”並使用組合信息創建第三個 DataFrame

使用 boto3 從 S3 存儲桶中的表單上傳文件,並在 lambda 中創建處理程序

使用 Javascript 或 jQuery 從文本框輸入創建數組,並可以在單擊時刪除數組元素

如何使用 git 僅使用令牌從 cli 創建 github 存儲庫?

如何在struct中創建一個數組以在循環中使用它?

如何使用另一列的值從一列創建多列?

如何使用java流從現有列表轉換創建的新匹配值列表

使用 jq 從 Bash 數組創建對像數組

如何使用pandas從csv行創建嵌套數組?

如何使用 SQLite 從創建日期計算財政年度

Swift - 如何從 mapViewkit 中的 API 數據創建要使用的局部變量

使用 Angular 從 GET 請求中創建圖表時出現問題

如何使用 .isin() 和列表從 Pandas 中的多列創建單列?

如何使用 Python 從頭開始創建 .docx 編寫器?

如何從沒有索引列的 csv 文件創建數據框(使用 python pandas)?

僅使用標準 python 庫從多行輸入創建列表對象

如何創建一組用戶選擇的單元格,我可以從中在 Excel vba 中迭代?

如何檢查表的長度並用它創建一個if條件並刪除一行?