看来又要破费了 :) 为什么SYSTEM等文件不能被编译.(50分)

  • 主题发起人 主题发起人 QQ989753
  • 开始时间 开始时间
Q

QQ989753

Unregistered / Unconfirmed
GUEST, unregistred user!
无意中发现,比如,我把Dialogs单元的如下代码
procedure ShowMessage(const Msg: string);
begin
ShowMessagePos(Msg, -1, -1);
end;
改成
procedure ShowMessage(const Msg: string);
begin
ShowMessagePos(Msg, -1, -1);
dfasfasfsdafdasf为什么不报编译错误.
end;
后,编译ALL,没有任何错误发生.想知道为什么会这样,大家有没有注意过这个问题的?
确实,我没有改SYSTEM,DIALOGS这些单元的必要,但,我真的想知道为什么会这样.谢了.
 
怎麽看不出你改什麽了???????????
 
delphi直接调用 .dcu
如果你在工程选项中设置查询路径
C:/Program Files/Borland/Delphi7/Source/Rtl/Sys

:-) Delphi 就要报错了

得分!
 
to JamesBond_L:
这句是我加的
"dfasfasfsdafdasf为什么不报编译错误."
to logingyw:
应该不是的,我已经设过了.
还请两位继续.
 
unInstall system package first.
 
今天没有空试了,明天看看再说.希望问题明天能得以解决.
关注此问题的,请帮助UP一下,我先下线了.
 
先把system 和 Dialogs的dcu改名
 
try it first
 
最好的方法是把SYSTEM.pas等文件放到你当前的应用程序的目录下,这样程序就可以最先从这里搜索,而且只在当前的程序又效,不妨碍别的程序的完整性!
 
whtsuperant:
改名没有用.
萧星离:
你所谓的最好方法,我也十二分的赞同类似的这种做法,可是,对于本问题并没有实际用处.因为,问题依旧存在.
ALL:
希望大家要发表意见之前能够亲自验证一下自己的做法.谢了先.
 
"unInstall system package first. ",不知想反安装哪个系统包,能不能详细写一下.
 
问题有了新进展,原来,SYSTEM和DIALOGS等文件不能相同对待.
其中,SYSTEM文件比较特殊,且,我也找到了其特殊的地方,请看宝兰的注释.
{ Predefined constants, types, procedures, }
{ and functions (such as True, Integer, or }
{ Writeln) do not have actual declarations.}
{ Instead they are built into the compiler }
{ and are treated as if they were declared }
{ at the beginning of the System unit. }
对于DIALOGS之类的,我还是期待着有人能够指点一下.
另:
萧星离,基于上面的注释内容,你在程序当前目录考一个SYSTEM文件应该是没有用处的.
你可以试试.
 
现在,问题似乎变成了:"为什么DELPHI不肯编译我改动的DIALOGS之类的单元".
改名或是删除DCU也不行.而且,我想正面知道原因.大家都知道,我们自己的文件,只要有PAS,DELPHI会从PAS开始工作,生成DCU.为什么DIALOGS这样的文件偏偏不呢?
期待ING……
 
system的处理特殊一些。对DIALOGS你可以拷到项目目录中。再把DIALOGS单元加入到你的
项目中就行了。这时你再改改。一定会报错的。
因为对于在$DELPHI/lib上有相应的dcu文件的单元,delphi是不会对其重新编译的,你只
有把它加入到你的工程中dephi才会重新编译。
 
已经把函数的功能让编译完成了,函数的说明和实现只是让你看过瘾.
 
To jiangxiancheng:
>>因为对于在$DELPHI/lib上有相应的dcu文件的单元,delphi是不会对其重新编译的,你只
>>有把它加入到你的工程中dephi才会重新编译。
那为什么在$DELPHI/lib上没有了相应的dcu文件的单元,DELPHI仍然不编译呢?比如,我将DIALOGS.DCU改名.

 
QQ989753兄:对不起了,我也没有想到System.pas竟然是这样得,后来测试一下,我得做法对System.pas是行不通得 ,原因是System.pas中的内容实际上只是system的一部分,很多缺省类型的定义不在其中(在system.dcu中是有的),因此不可能编译和使用。也就是说System.dcu不是由System.pas生成得!它所有得东西都由编译器内置
 
顺便翻译一下QQ989753兄得那段E文,可能更明白些

这一单元包含预定义的常量、类型、过程和函数(诸如:Ture、Integer或Writeln),它们并没有实际的声明,而是编译器内置的,并在编译的开始就被认为是已经声明的定义。你可以将Classes.pas或Windows.pas等其他源程序文件加入你的项目文件中进行编译和调试其源代码,但你绝对无法将System.pas源程序文件加入到你的项目文件中进行编译!DELPHI将报告重复定义System的编译错误!】
 
TO 萧星离:
不要这么客气,大家讨论问题嘛.对于除了SYSTEM单元以外,你说的做法其实已经很好了.
其实,你的做法,也应该是我们最宜采用的办法.

那天,我只是无意中发现有这么一个现象,想知道个究竟罢了.没办法,怕以后被人家追问为什么会这样时答不出来,只好自己先问问大家啰.
 
对于把Lib下的dcu改名后还是不编译的问题。我也不太清楚。我想可能是delphi在其运行包
中发现已有了dialogs的单元,就直接链接了。就没有去编译。
 
后退
顶部