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

Tha*_*arc 1 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';
Run Code Online (Sandbox Code Playgroud)

这编译好,但我在DLL文件中有AV错误,因为我怀疑问题是动态数组没有指定大小,我想把它抛出一个静态数组.

但是,如果我用上面的函数编写

DSOCH1, DSOCH2: array [0..31] of double;
Run Code Online (Sandbox Code Playgroud)

我得到上面提到的编译器错误.

附加信息:我有如何使用这个为C编写的DLL的说明,因为我几乎不知道它,我可能会遗漏这些数组周围的其他东西:这是原始函数:

long RetrieveDSOData(unsigned char whatchannels, double *DSOCH1,
double *DSOCH2, unsigned short *LADATA, unsigned char Nth_Sample)
Run Code Online (Sandbox Code Playgroud)

有这样的解释:

*DSOCHX: A pointer to an array of points from the DSO channels.
*LADATA: A pointer to an array of LA data
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*ite 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';  
Run Code Online (Sandbox Code Playgroud)

这至少可以解决编译器错误.我对你如何从DSO通道中的一系列双倍的数组[0..31]感到困惑.我不能回答你的问题的其余部分或者,出于同样的原因-我不知道是什么LA数据是,所以我不知道你是怎么到USHORT阵列LADATA参数.