如果一个EXE或DLL选了BUILD WITH RUNTIME PACKAGE,当这个PACKAGE发生变化后,是不是引用了这个PACKAGE的DLL都要重新编译呢?如果是的话,有没有什么好方法解决这个问题呢?(要尽量降低影响并且达到类型共享)

解决方案 »

  1.   

    但是我昨天试过下,好像改了包里的文件,只要EXE调用的函数、类没变,似乎不需重新编译。到底是怎样的呢?
      

  2.   

    对的,只要bpl内的单元名,函数名,类名等暴露在外的东西没有改变,就不需要重编译使用它的bpl,否则会出现“找不到程序输入点”错误。如果改变了一下函数内部的实现就需要重编译,那还叫什么动态连接库。
      

  3.   

    会有一些不同
    bpl不像dll,如果你把bpl当作dll用了,用 LoadPackage/UnloadPackage FindClass找类而没用引用bpl中任何dcu,就不要重新编译但bpl生成的unit.dcu,可以直接在调用者这边 use,这样bpl就是静态引入的,这时就有些情况要重新编译比方你在程序中用了 bpl 中定义的某类,这个类某成员(包括函数)发生了变化,加改都不行,就是你没用到这个变化的,都要重新编译,原因是 RTTI信息在调用者这边需要更新一下,要不然入口不一样
      

  4.   

    Dll不要重新编译,因为bpl是运行期(Runtime)加载的,跟编译时的版本无关!