【问题标题】:Delphi pass static array as var in function parameterDelphi在函数参数中将静态数组作为var传递
【发布时间】:2015-05-15 23:59:25
【问题描述】:

当我尝试使用静态数组而不是动态数组时,我似乎找不到任何信息或理解为什么编译器会抛出错误“E2029 'OF' expected but '[' found”。

我从一个 DLL 文件中调用函数,所以我有这个代码:

function RetrieveDSOData(whatchannels: uchar; var DSOCH1, DSOCH2: array of double; 
var LADATA: array of ushort; Nth_Sample: uchar): longint; 
stdcall; external 'E_l80.dll';

这可以编译,但是我在 DLL 文件中有 AV 错误,并且由于我怀疑问题是动态数组没有指定大小,所以我想将它抛出一个静态数组。

但是,如果我用

编写上述函数
DSOCH1, DSOCH2: array [0..31] of double;

我收到上面提到的编译器错误。

附加信息: 我有关于如何使用为 C 编写的这个 DLL 的说明,由于我几乎不知道,我可能会遗漏这些数组周围的其他内容: 这是原来的功能:

long RetrieveDSOData(unsigned char whatchannels, double *DSOCH1,
double *DSOCH2, unsigned short *LADATA, unsigned char Nth_Sample)

有这样的解释:

*DSOCHX: A pointer to an array of points from the DSO channels.
*LADATA: A pointer to an array of LA data

任何帮助将不胜感激。 (请不要仅仅为了删除最后一句话而编辑这个问题......没有意义......)

【问题讨论】:

  • 您是否尝试过定义自己的类型并改用它? type TMyArray = array[0..31] of Double;
  • 你需要创建一个类型别名TMyArray = array[0..31] of double,然后使用TMyArray。
  • 是的。给出的提示(以及答案中)确实让我通过了编译器,但是现在应用程序在调用函数时挂起...... :(你碰巧在问题的第二部分帮助我......?

标签: delphi


【解决方案1】:

定义一个类型,然后使用该类型。

type
  TDSOArray = array[0..31] of double;

 function RetrieveDSOData(whatchannels: uchar; 
  var DSOCH1, DSOCH2: TDSOArray;
  var LADATA: array of ushort; 
  Nth_Sample: uchar): longint; stdcall; external 'E_l80.dll';  

这至少可以解决编译器错误。我对您如何从 DSO 通道中的点数组array[0..31] of double 感到有些困惑。出于同样的原因,我也无法回答您的其余问题 - 我不知道 LA Data 是什么,所以我不知道您是如何获得 ushort 数组的LADATA 参数。

【讨论】:

  • 附带说明,据我了解,“declare”和“define”之间的区别在于“define”是您如何创建类型,而“declare”是您如何使用它类型作为变量。对吗?
  • @Jerry:谢谢。已更正。 (从词汇的角度来看,Define 似乎更正确。它定义一种类型,而不是声明你有一个。)
  • @JustMarc:我已经编辑了我的答案;我无法解释您稍后在问题中提供的类型,因为您没有包含这样做所需的信息,而且我不知道您尝试使用的 DLL。我在回答中添加了细节。
  • @JustMarc;您在此处发布的内容(您说的是带有这样的解释)不清楚。某处必须有关于“LADATA:指向 LA 数据数组的指针”的含义的信息;我不知道LA 是什么,所以我不知道 *a array of LA data 可能是什么。
  • 几乎可以肯定,数组应该被翻译成指针。并且开放数组var LADATA: array of ushort; 不能匹配unsigned short *LADATA 这是一个普通的值PWord
猜你喜欢
  • 2010-12-08
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
相关资源
最近更新 更多