本帖最后由 naocha2 于 2009-09-17 13:59:19 编辑

解决方案 »

  1.   

    build with runtime package 上面好像是可以选择哪个包的
      

  2.   

    也就是说,你可以编辑build with runtime package列表。需要更新的就添加上去就可以了。
      

  3.   

    不行啊。那个框里我只添加了我的package1.但放到别的机子上还是提示找不到rtl140.bpl
    exe大小没有还原。
      

  4.   

    包的引用是具有传递性的,你的package1引用了rtl这个包,自然就要带上rtl140.bpl这个包(注:不同版本的DELPHI,rtl后面的那个数值会不同)
      

  5.   

    选择'build with runtime package',并在列表中增加dcp文件,然后在程序单元文件中uses包的单元文件名,这种方式叫做静态绑定,程序运行时要求在搜索路径中能够找到bpl文件。静态绑定,适合公共函数或全局变量的共享使用。只要函数接口不变,主程序就不用重新编译,bpl文件可以单独更新和替换。还有一种静态绑定,就是主程序项目文件中不选择'build with runtime package',那就需要包文件的dcu文件,但运行时也不再需要BPL文件的支持,因为BPL中的代码已经集成进exe文件中了。用delphi缺省做出来的程序就是这种方式,一个exe就可以了。动态绑定的话,不需要做上面的操作,但需要使用loadlibrary在运行时加载BPL文件。同时,BPL文件中所定义的类,必须在被加载时自动注册类信息。比如你的BPL中定义了一个窗口类,在BPL单元文件中这样:
    initialization
      RegisterClass(TMyForm);finalization
      UnRegisterClass(TMyForm);然后,在主程序代码中:
    1、loadlibrary(FullPathBPLfileName);
    2、定义一个可持久化类类型:AClass: TPersistentClass; //这里就在暗示,你的TMyForm必须申明为一个TPersistent类的子类,否则不支持RTTI,也就无法动态创建类对象。
    3、AClass := GetClass(‘TMyForm’);
    4、创建TMyForm:aForm := TCustomForm(AClass.Create).Create(Application);
    5、aForm.show;