将DLL分组以在Executable中使用

时间:2010-03-05 15:39:24

标签: delphi dll

有没有办法对一堆DLL进行分组,并且仍然在运行时使用它们(未压缩)。对不起,这个问题听起来简洁而愚蠢,但我不确定还要问什么。

我会解释这种情况:

我们有两个独立的Windows应用程序,现在我们的一个应用程序已经膨胀到如此不可思议的比例,以至于其他应用程序无法在第一个应用程序的范围之外运行。我们希望保留一些封装,同时让较小的程序进入一些较大程序的功能。

运行应用程序没有问题,除了我们不想发送小项目所有的20-30个DLL。

3 个答案:

答案 0 :(得分:5)

可以通过添加启动代码来检查目标系统上是否存在DLL,如果没有,则从资源部分提取它们(或者简单地标记到exe的末尾)。这样做的一个很好的例子是Process Explorer - 它作为单个二进制文件分发,但在运行时它会提取并安装驱动程序。

答案 1 :(得分:3)

如果您遇到大多数或所有这些程序集必须保持在一起的情况,那么我强烈建议您将代码文件合并到同一个项目中并重新编译。这将为您留下一个装配。

当然还有其他一些考虑因素,例如编译时间,最终dll的总体大小,各个部分的更改频率,以及每个组件是否在没有其他部分的情况下部署。

执行此操作的公司的一个示例是Telerik。他们的dev组件都被编译到同一个程序集中。这使部署成为一件轻而易举的事。对比是Dev Express,它将每个控件放入它自己的程序集中。由于这只是维护,更少的部署,Dev Express项目不适合胆小的人。

(我不为这两家公司工作。不过,我对这两个工具包都有很多经验。)

答案 2 :(得分:3)

您可以将DLL存储为资源,并使用BTMemoryModule,它实际上允许您在Stream上加载LoadLibrary。

通过这种方式,您可以将多个DLL直接编译到EXE或单个资源DLL中。

请参阅http://www.jasontpenny.com/blog/2009/05/01/using-dlls-stored-as-resources-in-delphi-programs/