最近写了个exe调用bpl,其中bpl含有tms第三方控件。
再发布程序的时候,其他人电脑运行时候提示缺少rtl100.bpl、vcl100.bpl、tmsd2007.bpl 这三个包。
然后我在我自己电脑上查找了这三个包拷贝给那个电脑,运行ok。那么是不是我发布程序的是必须要发布我所requires调用的包呢?
只发布一个exe那是最好的了。
而且这些包还必须和主程序exe在同一个文件夹下。有没有办法把这些包统一放在某个文件夹下面呢?ps:我是运行时动态调用我自己编写的包mytest.bpl。也就是在Runtimes packages中没有勾选Build with runtime packages。

解决方案 »

  1.   

    按理来说 放到 system32 中是可以的Build with runtime packages 不勾上还不行啊? 不勾上基本上就不需要 bpl了
      

  2.   

    是的,如果你用动态调用bpl,也就需要把所需要的bpl包都带上。放到同一文件夹或者system32下。关键是你的bpl需要啊
      

  3.   

    如何放在同一个文件夹下面呢,然后去调用呢?比如D盘。
    system32还是算了。
      

  4.   

    bpl就是这样,如果存在嵌套调用,那么发布时你就都要带上,要么就像1L说的,不过那样程序就会显得很大
      

  5.   

    理论上这是和系统路径有关的,当前路径,windows,system32等,系统路径里可以被找到的路径都可以用来存放
      

  6.   

    http://topic.csdn.net/u/20071115/13/ba46a563-c503-4d8b-a376-237401bca0e2.html
      

  7.   

    一般时放在与EXE相同的目录下,或者放system32目录下
    如果不放系统PATH能找到的目录路径下,也可以放在自己定义的目录下,那么在调用的时候就要加上路径了。自己觉得如何方便,就如何做。
      

  8.   

    我自己写的bpl我当然可以加个路径调用,比如F_Package_Handle := LoadPackage('C:\Documents and Settings\Administrator\Application Data\test\fdc_dpk.bpl');但是我的bpl会有窗体,所以会自动带上rtl00.bpl, vcl00.bpl。不然编译不过去啊。 还有我引用的第三方控件。
    那么请问这些bpl如何实现动态调用呢?
    ps:放系统system32。有的win7系统用户阻止别人放系统文件夹里。
      

  9.   

    不勾上程序运行没问题。但是调用我的bpl还会提示缺少某些bpl的。因为我的bpl里面调用了这些。但是我不知道我的程序如何去自动调用rtl00.bpl, vcl00.bpl。 还有我引用的第三方控件bpl。
      

  10.   

    bpl require的包为被主程序引用,自然就不会被编译到exe中去。方法:
    1. 在主程序中uses相关tms的单元,再注意不要包含到将build with runtime package中去
    2. tms的bpl,单独与exe发布到同一目录或system32
      

  11.   

    除了放在system32目录。可有其他办法?
    ps:有人说可以将包合并。如何合并哦。
      

  12.   

    require所有包都要发布,包括递归被引用到的不要怕麻烦,别人C#和JAVA早就是这样干的了。既然你要用BPL,就要明白BPL的好处,例如说可以以类库形式在设计器被引用,运行期可以动态更新其中一个要修改的BPL等,不要为了BPL而BPL。你要这样,还不如最原始的全部编译成一个EXE好了。