ITXP365(智码IT网)

分享电脑知识,传播IT技巧

致敬爱学习的您,祝您访问愉快!

Delphi中两个搜索路径下有相同的pas文件,使用那个?还是优先使用那个?


发布:智码IT网   阅读:
结论:使用先设置的路径的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;
上一篇:没有了
下一篇:没有了

© 2001-智码IT网 www.itxp365.com版权所有

蜀ICP备2021001527号