【问题标题】:Getting the pointer data from function parameters (Delphi)从函数参数中获取指针数据(Delphi)
【发布时间】:2015-05-16 03:26:02
【问题描述】:

继续topic here,不熟悉指针,

鉴于其中的指针是要取回的数据,如何正确调用下面的函数,以及调用后如何实际获取该数据?

function RetrieveDSOData(whatchannels: Byte; DSOCH1, DSOCH2: PDouble; LADATA: PWord; Nth_Sample: Byte): longint; cdecl; external 'E_l80.dll'; 

(需要 DSOCH1、DSOCH2 和 LADATA 数据...) 如果它有任何帮助/重要 -> 文档指出这些是“指向数组的指针”。

如果这是重复的,我只是没有按正确的关键字查找,请投票关闭它。

谢谢。

编辑: 假设可以通过函数的返回来接收大小。文档指出: 返回:DSO 和 LA 数组中的样本数。这个号码可能不 be (total blocks x 1024) 因为开始和结束的一些样本被丢弃 各种用途。
因此,LADATA 数组的最大大小可能是 (1024 x 32samples x 2 (2x8 数字通道,2 字节?))...

【问题讨论】:

  • 你需要知道数组需要多长时间
  • @DavidHeffernan,请查看我的编辑。 (我没有忘记添加这个信息,只是之前真的没有看到连接..)。

标签: delphi pointers


【解决方案1】:

你必须用数组的地址调用函数,它会填充这些数组。示例:

var
  DS1: array[0..31] of Double;

RetrieveDSOData(whatchannels, @DS[0], ...

【讨论】:

  • 现在如果函数返回数组长度是真的,我相信没有办法像SetLength(DS1, RetrieveDSOData(whatchannels, @DS1[0].....那样实际使用它,特别是因为要设置3个数组长度,对吗?那么,拥有最大大小的静态数组是否安全,然后只使用函数的返回来避免每次都查看整个数组,而只是查看数据的实际位置......?
  • @JustMarc,声明 DS1 等。人。作为最大大小并使用返回的长度来迭代数组。 SetLength 即使对于一个数组也不起作用,因为您必须在调用之前进行分配。您可以预先分配一个最大大小,然后再设置实际大小,但如果您愿意的话。
  • @LURD 这就是我的想法。感谢您的确认。尽管如此,我还是这样做了,但即使使用超过最大可能大小的方式,应用程序在调用函数时仍会挂起,就像 MBo 写答案的方式一样......:/
  • [待删除] - 如果我使用更大尺寸的数组,调试它会显示 AV 错误或堆栈溢出。这值得提出新问题吗?
  • @Just Marc 你确定在cdecl 调用约定?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多