结论:使用先设置的路径的pas文件,后面设置的路径为无效路径
//以下是实验代码:
假设IDE的Library path设置了D:\Lib1和D:\Lib2,现在两个路径下都有文件lib.pas文件。
//--------------------------------------------------------------------------------
//D:\Lib1\lib.pas文件下面内容如下
unit lib;
interface
function M():string;
function M_Lib1():string;
implementation
function M():string;
begin
Result := 'call method from D:\lib1\lib.pas';
end;
function M_Lib1():string;
begin
Result := 'call D:\lib1\lib.pas M_Lib1()';
end;
end.
//--------------------------------------------------------------------------------
//D:\Lib2\lib.pas文件下面内容如下
unit lib;
interface
function M():string;
function M_Lib2():string;
implementation
function M():string;
begin
Result := 'call method from D:\lib2\lib.pas';
end;
function M_Lib2():string;
begin
Result := 'call D:\lib2\lib.pas M_Lib2()';
end;
end.
//--------------------------------------------------------------------------------
//【问题】 lib.M()方法究竟是调用Lib1下的M()方法还是Lib2下的M()方法?
//【结论】使用先设置的路径的pas文件,后面设置的路径为无效路径
procedure TForm3.FormCreate(Sender: TObject);
var
s:string;
begin
//设置搜索路径为:D:\Lib1
//s := lib.M();
//Memo1.Lines.Add(s); // 返回结果:call method from D:\lib1\lib.pas
//设置搜索路径为:D:\Lib2
//s := lib.M();
//Memo1.Lines.Add(s); // 返回结果:call method from D:\lib2\lib.pas
//按照顺序,设置搜索路径为:D:\Lib1 和 D:\Lib2
//s := lib.M();
//Memo1.Lines.Add(s); // 返回结果:call method from D:\lib1\lib.pas
//按照顺序,设置搜索路径为:D:\Lib2 和 D:\Lib1
//s := lib.M();
//Memo1.Lines.Add(s); // 返回结果:call method from D:\lib2\lib.pas
//按照顺序,设置搜索路径为:D:\Lib2 和 D:\Lib1
//s := lib.M_Lib1(); //编译错误 :[dcc32 Error] Unit1.pas(53): E2003 Undeclared identifier: 'M_Lib1'
//s := lib.M_Lib2(); //编译通过
//结论:
//1、如果搜索路径中有相同的pas文件,则使用先设置的路径中的pas文件,后面设置的pas文件会被忽略
//2、使用先设置的路径,后设置的路径无效
//3、如果尝试调用后设置的pas文件的方法(该方法不包含在先设置的pas文件中) ,则不会通过编译
end;