Delphi在函数参数中将静态数组作为var传递

时间:2015-05-15 23:59:25

标签: delphi

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

我正在调用函数形成一个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

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

1 个答案:

答案 0 :(得分:5)

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

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通道数组[0..31]的双重的点数得到了一点点的困惑。由于同样的原因,我无法回答你的其余问题 - 我不知道 LA Data 是什么,所以我不知道你是如何得到阵列的ushort 表示LADATA参数。