各位大哥,我是新手 ,请问大家 运行时包与设计时包的区别,
设计时包 是运行时包编译的结果吗?
在IDE中看不到运行时包 对么,
只能够看的到设计时包对么?希望前辈们耐心解答,先谢过大家了!

解决方案 »

  1.   

    我来忽悠一下
    运行时包和设计时包应该是为出于不同的设计目的而采用不同编译方式而设计的,对应编译选项中build with runtime选项。普通方式编译出来的exe执行体中包含了bpl, 采用rtl方式编译出来的exe是与bpl分离的,一方面减少发布文件大小,同时也减少内存开销,(把bpl当dll看就能理解过来,其实它本身就是dll),另一方面对于模块比较多/dll比较多的工程来讲整体的结构比较纯(如果一个项目分为1个exe,多个dll那么他们别编译/这里说的是非rtl模式,那么执行起来内存空间便存在多个TObject结构,同样如果dll中调用了Application对象(如果不是模块中传递过去的),内存空间中也同样存在多个Application对象,他们不是同一个对象,这一点很重要)而rtl方式(全rtl方式,部分rtl方式不谈)全局只有一个TObject,一个Application对象(这里是哪application举例,一个prj不一定有application),不同模块访问到的也是同一个,大概就这个意思我也说不清
      

  2.   


    DELPHI 5开发人员指南21.4 组件包
    Delphi 3引入了包的概念,这样就可以把应用程序的一部分放到一个单独的模块中,让其他应用
    程序共享。包类似于动态链接库( D L L ),但用法不一样。包主要收集组件并把它们放到一个独立的、
    可共享的模块(一个Borland Packages Library或. b p l文件)中。在应用程序开发过程中,包就像动态链接
    库一样,它也是在运行期动态地链接到应用程序中的,而不是在编译链接期链接的。因为代码是放
    在. b p l文件中的,所以. e x e或者. d l l文件变得很小。
    包与D L L不同的是,它是Delphi VCL 专用的。D e l p h i的包在其他语言写的应用程序无法使用
    ( C + + B u i l d e r例外)。使用包的原因是使用D L L具有一些缺陷。在D e l p h i早期版本的V C L总要把至少
    1 5 0 K B到2 0 0 K B的代码加到每一个可执行文件中。这样,即使把应用程序分成若干个D L L,每个D L L
    和应用程序都包含这些冗余代码。尤其是,如果开发的是一个套件,问题更为明显。包的引入,便很
    好地解决了这些问题。
    21.4.1 为什么使用包
    为什么使用包,其原因有若干,下面讨论其中的3个。
    1. 减少代码
    使用包的最主要理由就是缩减了应用程序和D L L的大小。D e l p h i总是把V C L分成若干个逻辑组即
    包。事实上,在编译的时候,就已经存在许多包了。
    2. 使应用程序更容易分发
    你将发现许多应用程序的完全版、演示版和更新版,都可以通过I n t e r n e t分发。假想一下,如果用
    户安装了一个程序的某一个版本,这时允许用户只下载该程序的片段,而不是整个应用程序,那有多
    好呢!
    通过把应用程序拆成若干个包,用户就可以只需要更新需要更新的地方。不过,请注意版本一致
    性的问题。
    3. 包容组件
    使用包的另一个非常重要的理由就是分发第三方的组件。如果你是一个组件销售商,就必须了解
    怎样创建包。其原因是因为组件、属性编辑器、向导和专家等,一般都是打成包分发的。
    21.4.2 什么情况下不使用包
    一般不要使用运行期包,除非你能确信其他应用程序也使用运行期包。否则,与其让包占用空间,
    还不如把包直接编译到应用程序中。为什么会这样呢?假如使用了包,应用程序的长度将2 0 0 K B减小到
    3 0 K B,这样看似节省了不少空间。不过,还得分发包,可能还有V c 1 5 0 . d c p包,这个包的大小是2 M B。
    这样看来,就不像所想的那样节省空间。我们建议,如果是几个应用程序需要共享代码,这时就应当考
    虑使用包。请注意,这仅仅适用于运行期包。如果你是个组件编写者,必须提供包含组件的设计期包。
    21.4.3 包的类型
    包分为4种类型:
    • 运行期包。运行期包包含了应用程序在运行时所需要的代码。如果一个应用程序使用了运行期
    包,这个包必须与应用程序一起分发,没有这个包,该应用程序将无法运行。
    • 设计期包。设计期包包含组件、属性或组件编辑器、专家等,这些都是在设计时I D E需要用到的。
    该类型的包只适用于D e l p h i环境,并且不随应用程序一起分发。
    • 运行期和设计期包。这种包既是运行期包,又是设计期包。这种包一般不包含设计期专用的东
    西,譬如属性或组件编辑器、专家等。使用这种包,可以简化应用程序的开发和分发。不过,
    如果这种包包含了设计期专用的东西,那么应用程序就会含有冗余的东西。我们建议创建这种
    包时,避免包含设计期专用的东西。
    • 既不是运行期包,也不是设计期包。这种包很少用,,它一般由其他包使用,并不由应用程序或
    在设计环境中直接使用。