本想长篇大段地把问题的来龙去脉写清楚,可是,刚刚想写就
停住了,本来一个小问题,值得花大量的时间写它吗?不值.那
么,不写了吧,也不行,答应要写上来的.而且,也是自己走的一
段弯路,写出来吧,免得别人同我一样.所以,简单写一下得了,
两全齐美.
不说事情的由来了吧,总之,由这个问题.得出以下的结论,不
要笑,这个结论简单得,我直想说:"!@#$%^&*"
那就是,
1.DELPHI总会在搜索路径下优先找PAS文件,由它来生成DCU文
件.再利用DCU文件来生成EXE文件(或DLL文件).
2.DELPHI在搜索不到PAS文件时,会直接找DCU文件,当然,如果
DCU文件也找不到,那对不起哟,编译器罢工.
3.SYSTEM.DCU是一个特殊的文件,它不是由SYSTEM.PAS生成.
是编译器内置的.
4.DELPHI,搜索文件是按由内到外的顺序进行的(由编译器内
到编译器外,工程内到工程外).
好了,基本以上这些比较简单地结论,来分析问题的产生及每
个人的做法.
首先,我说说自己的问题.由于,没有注意到delphi的
Dialogs.dcu和Dialogs.pas不在同一文件夹下,以为,系统是
从PAS开始编译的,所以,认为,不正确的PAS编译通过是不正常
的.其实,编译器直接使用的是DCU.
logingyw, 说"delphi直接调用 .dcu,如果你在工程选项中设
置查询路径
C:/Program Files/Borland/Delphi7/Source/Rtl/Sys
Delphi 就要报错了"呵呵,好像是很对,可是,他忽略了他给出
来的路径是SYSTEM.pas的路径,并且,可以肯定的是,他没有试
一下.其实,由于system.pas比较特殊,要不然,他真是一语中
的.不过,既然有这个"要不然"存在,他就不能得全分啰.
whtsuperant说:"先把system 和 Dialogs的dcu改名",呵呵,
看得出来,他也是知道从pas到DCU的道理.不过,他也没有试一
下.因为,SYSTEM.DCU是不能改名的,否则,程序没有办法运行
了.Dialogs.dcu改名,这是一个好办法,强制让DELPHI用PAS来
编译,不过,这时应该是先关闭DELPHI,再打开.否则,由于
DELPHI的记忆效应,编译并不报错.而是运行时出错,说找不到
文件.而巧合的是,由于是测试程序,一般根本不会去执行,界
面上一个东东没有,会有什么错误呢?结果,可想而知. 如果
关闭后打开,DELPHI报告文件找不到,指定路径后,又没有必要
改名了.DELPHI会从PAS开始.所以说,改名不是关键.
来自:萧星离, 时间:2003-6-23 17:34:00, ID:1974817
最好的方法是把SYSTEM.pas等文件放到你当前的应用程序的
目录下,这样程序就可以最先从这里搜索,而且只在当前的
程序又效,不妨碍别的程序的完整性!
其实这样做的目的是让DELPHI在程序内找,那自然可以编译了
.当然,SYSTEM.PAS是不能加入到工程中去的.因为,编译器已
经内置了.由于优先顺序,DELPHI先编译工程内的,所以,"不能
编译"的问题被忽略.
来自:jiangxiancheng, 时间:2003-6-24 8:53:00, ID:
1975812
system的处理特殊一些。对DIALOGS你可以拷到项目目录中。
再把DIALOGS单元加入到你的
项目中就行了。这时你再改改。一定会报错的。
因为对于在$DELPHI/lib上有相应的dcu文件的单元,delphi
是不会对其重新编译的,你只
有把它加入到你的工程中dephi才会重新编译。
这些话基本是对的,也说出来SYSTEM比较特殊.也告诉了大家
具体做法.比较有价值,可是,最后的一句是有错误的.
我不把$DELPHI/lib上有相应的dcu文件的单元加到工程中,如
果设置好了搜索路径(含相应PAS的路径),就可以编译了.To
jiangxiancheng:
>>因为对于在$DELPHI/lib上有相应的dcu文件的单元,
delphi是不会对其重新编译的,你只
>>有把它加入到你的工程中dephi才会重新编译。
那为什么在$DELPHI/lib上没有了相应的dcu文件的单元
,DELPHI仍然不编译呢?比如,我将DIALOGS.DCU改名.
就是由于我没有关闭DELPHI或是没有运行.
是DELPHI的记忆骗了我.
萧星离,是发表次数最多的了.也帮我认清了问题的根本.
提供的链接也是十分的有价值,不过,呵呵,我早就看过了.
还有,萧星离,你应该知道,编译器绝对没有内置那么多的东东
.我目前知道的,只有SYSTEM.
问题到这里,好像全都清楚了.其实到后来,才知道,真的是一
个小问题.这些概念,我们还是清楚的.罪魁祸首,是DELPHI将
DCU与PAS不放在一个目录下.当然,人家这么做有自己的好处,
怕我这些不懂的人给改坏了.那罪魁祸首只能是自己的,是自
己大意,没有发现DELPHI的用心所在.
结识大家比较高兴.希望以后大家多多交流.
问题保留一天,没有其实问题的话,结账.