Вы объявляете два разных типа массива.
Ваша процедура ожидает параметры типа Form1.Array
, но вместо этого вы передаете ей переменные типа Form2.Array
. И вы передаете параметры по ссылке var
, поэтому передаваемые переменные ДОЛЖНЫ ТОЧНО СООТВЕТСТВОВАТЬ типу параметров. Вот на что жалуется ошибка компилятора.
Даже если вы не использовали var
ссылки, эти два типа массивов, тем не менее, по-прежнему являются разными типами, НЕ совместимыми с присвоением друг с другом.
Вам необходимо избавиться от одного из типов массивов и использовать другой тип массива в обеих единицах. Например:
unit Form1;
interface
type
Array = array[1..20] of string;
...
private
ArrUser : Array;
ArrPassword : Array;
...
Procedure Write(var tFile; var arrUser, ArrPassword : Array);
implementation
...
Procedure Write(var tFile; var arrUser, ArrPassword : Array);
begin
...
end;
...
end.
unit Form2;
uses
..., Form1;
...
private
ArrUser : Form1.Array;
ArrPassword : Form1.Array;
...
implementation
...
begin
Write(tFile, ArrUser, ArrPassword) ;
end;
...
end.
Для удобства сопровождения вы должны создать третий модуль для объявления типа массива, а затем use
этот модуль везде, где вам необходим доступ к типу массива.
unit MySharedUnit;
interface
type
Array = array[1..20] of string;
implementation
end.
unit Form1;
interface
uses
..., MySharedUnit;
...
private
ArrUser : MySharedUnit.Array;
ArrPassword : MySharedUnit.Array;
...
Procedure Write(var tFile; var arrUser, ArrPassword : MySharedUnit.Array);
implementation
...
Procedure Write(var tFile; var arrUser, ArrPassword : MySharedUnit.Array);
begin
...
end;
...
end.
unit Form2;
uses
..., MySharedUnit, Form1;
...
private
ArrUser : MySharedUnit.Array;
ArrPassword : MySharedUnit.Array;
...
implementation
...
begin
Write(tFile, ArrUser, ArrPassword) ;
end;
...
end.