我似乎无法找到任何信息或理解为什么编译器会抛出错误“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
任何帮助将不胜感激。 (并且请不要仅仅为了删除这最后一句而编辑这个问题......没有意义......)
答案 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
参数。