比如:
在目录1创建了一个包,Package1.dpk,其中有一个单元文件UnitTest.pas,写了一些函数吧.此时编译生成Package1.dcp与Package1.bpl文件.再在另外一个目录建一个工程,同时把刚才编译出来的文件拷过去,然后把目录1改名,让它故意找不到.
此时,use UnitTest就可以用里面相关的函数了,如果把Build with runtime package的勾打上,编译可以通过,如果不打勾,它就提示找不到UnitTest.dcu,为什么会这样呢.难道一定要再整一个设计时包,目录文件结构都相同,函数定义也相同,只是函数中什么也不写,类似于c的头文件功能.
为什么把运行时库打上勾就可以不用呢.

解决方案 »

  1.   

    .bpl实际是一个类似于动态链接库的东西,如果需要静态链接进程序当中,则需要相应的目标文件(.dcu/.obj).
      

  2.   

    静态引入的是dcp,不是bpl。哪怕只给你dcp,都可以照样开发不误。bpl是发布的时候才一起发布的。
      

  3.   

    那bpl岂不是鸡肋了,假如我写了一组功能,封装成bpl给别人用的时候还是得提供源文件或dcu文件,如果能只提供bpl给别人就完美了,而且一旦动态连接,所以组件都要动态连接也是败笔啊,一般来说,大多数人应该想的是vcl相关的还是静态链接,只是自己写的这个bpl才动态连接.
      

  4.   

    dcp只是一个“入口文件”,你通过它来让IDE获知它对应的BPL中有什么内容,因此就可以进行开发了。
      

  5.   

    顶,4楼说法非常正确!如果要是动态使用Bpl就不需要Dcp文件了。
      

  6.   

    那有无办法让只我自己写的bpl动态链接,系统的bpl还是静态链接.这才是关键啊..
      

  7.   

    Build With Package当中只保留需要动态链接的bpl就可以了.
      

  8.   

    如楼上所言,build with runtime package中不包含的都是静态编译的
      

  9.   

    是静态连接(link),即代码被包含在程序当中,从而不需要再动态调用其它动态库.
      

  10.   

    不是喔,如果b.bpl引用了a.bpl,如果动态链接b的话,a也会自动动态链接了.如果我想公用一个登录窗口吧,我把它做成一个bpl,那么这个bpl肯定要引用vcl相关的组件,就算build with runtime package中只填了我写的这个bpl,其实vcl相关的组件还是动态链接的.不信的人可以试下.
      

  11.   

    dcp的引用具有传递性,你说的没错。
      

  12.   


    那有什么解决方案没呢,如果这个问题能解决,还有点价值,否则我宁愿用dll,虽然dll间共享变量麻烦点.我看中bpl的功能是可以共享变量这些.
      

  13.   

    这个问题不能解决,除非被引用的文件是静态引入BPL中的。不过我不建议这样做,因为一个系统所引用的所有BPL中,是不允许出现相同单元名的,相同单元名的必须抽出来在单独的BPL中。因此,a b c d这几个都引用VCL.BPL,才是正确的做法。DLL也有DLL解决不了的问题,例如说最常见的就是跨DLL后,类的类型信息会丢失,又例如说你举例的全局共享问题;当然,BPL也有它一些使用上的不方便。如何取舍应该根据实际情况。
      

  14.   

    看来 Harryfin 老兄的说法是正确的了.我在想如果delphi能再完美一点就好了.在不跨语言的情况下,那我们就可以用bpl完全替代dll了.搞得现在成了鸡肋.