ich habe zwei Prozeduren mit dem selben Namen in zwei verschiedenen Units. Die Prozeduren unterscheiden sich im Typ des Übergabeparameters. Beim kompilieren bekomme ich folgende Fehlermeldung:
"Error: Call by var for arg no. 1 has to match exactly: Got "TStringArray" expected "TLogResultArray".
Das interessant ist, wenn ich die Reihenfolge der Units "toolkit" und "declare" in der USES Anweisung in global.pas umdrehe, kann ich das Testprogrmm kompilieren, dann funktioniert der Aufruf mit dem andern Datentyp aber nicht mehr. Ich habe das Programm und die Units unten aufgeführt. Der Fehler tritt in der Unit global.pas in der Zeile "SetArray(MasterResultArray, 0);" auf.
Die Lazarus Version ist 0.9.30.
Kann mir bitte jemand sagen, warum dies so ist?
Code: Alles auswählen
program test;
uses toolkit, declare, global;
begin
SelectMaster('select * from dual');
end.
Code: Alles auswählen
unit toolkit;
interface
type TStringArray = array of ansistring;
procedure SetArray(var Arr: TStringArray; Len: integer);
implementation
procedure SetArray(var Arr: TStringArray; Len: integer);
begin
if Len < 1 then setlength(Arr, 0) else setlength(Arr, Len+1);
end;
end.
Code: Alles auswählen
unit declare;
interface
uses toolkit;
type TLogResult = record
Line : ansistring;
end;
TLogResultArray = array of TLogResult;
var MasterResultArray : TStringArray;
LogResultArray : TLogResultArray;
procedure SetArray(var Arr: TLogResultArray; Len: integer);
implementation
procedure SetArray(var Arr: TLogResultArray; Len: integer);
begin
if Len < 1 then setlength(Arr, 0) else setlength(Arr, Len+1);
end;
end.
Code: Alles auswählen
unit global;
interface
uses toolkit, declare;
procedure SelectMaster(Sql: ansistring);
implementation
procedure SelectMaster(Sql: ansistring);
begin
SetArray(MasterResultArray, 0);
end;
end.