You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VBA中向API函数AD2_FDwfAnalogInStatusData传递Double数组?

解决VBA中Double数组传递给API的问题

你的代码里传递数组的方式存在错误,rgdSamples1(nSamples)是取数组的单个元素值,而API需要的是数组的起始内存地址来写入采样数据。正确的传递方式如下:

  1. 修正数组传递参数
    将rgdSamples1(nSamples)替换为rgdSamples1(0),或者直接传递数组名rgdSamples1(VBA会自动传递数组首元素的地址)。示例代码:

    'Get Data from Channel 1
    Dim rgdSamples1() As Double
    ' 注意:如果nSamples是8192个采样点,ReDim设置为0到nSamples-1,避免多分配一个元素
    ReDim rgdSamples1(0 To nSamples - 1) As Double
    ' 传递数组首元素的引用,让API写入数据
    Scope = AD2OsciFunc.AD2_FDwfAnalogInStatusData(hdwf, 0, rgdSamples1(0), nSamples)
    Scope = AD2OsciFunc.AD2_FDwfDeviceCloseAll()
    
  2. 关键说明

    • VBA中,当你将数组的单个元素(如rgdSamples1(0))以ByRef方式传递给API时,实际传递的是该元素的内存地址,也就是整个数组的起始地址,API可通过这个地址连续写入nSamples个Double类型的数据。
    • 确保数组大小足够容纳nSamples个元素,否则会触发内存溢出错误。原代码的ReDim rgdSamples1(nSamples)会分配nSamples+1个元素(索引0到nSamples),若需精确匹配采样数量,建议改为ReDim rgdSamples1(0 To nSamples - 1)。

内容的提问来源于stack exchange,提问作者proyo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:20:30