Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
大型Delphi exe和维护问题_Delphi - Fatal编程技术网

大型Delphi exe和维护问题

大型Delphi exe和维护问题,delphi,Delphi,我有一个有数百个VCL表单的项目,编译时exe大小约为80MB,这不是问题。当客户要求对单个表单进行更新或调试单个表单时,为单个更改更新80mb是一个大问题 将这些表单拆分为不同的文件并从一个exe加载它们,有哪些可能的选项或良好做法。 如果需要任何更改,则发送/更新该特定表单或部分 德尔福10.1柏林 我总是发送发布文件 谢谢当然可以将VCL表单移动到DLL或软件包中。 最复杂的问题是主应用程序和模块之间的数据交换。 当您使用dll时,主应用程序和dll都包含完整的VCL内部结构。因此,不可能

我有一个有数百个VCL表单的项目,编译时exe大小约为80MB,这不是问题。当客户要求对单个表单进行更新或调试单个表单时,为单个更改更新80mb是一个大问题

将这些表单拆分为不同的文件并从一个exe加载它们,有哪些可能的选项或良好做法。 如果需要任何更改,则发送/更新该特定表单或部分

德尔福10.1柏林 我总是发送发布文件


谢谢

当然可以将VCL表单移动到DLL或软件包中。 最复杂的问题是主应用程序和模块之间的数据交换。 当您使用dll时,主应用程序和dll都包含完整的VCL内部结构。因此,不可能在导出函数中使用对象作为参数和返回值,因为主应用程序中的TObject和dll中的TObject是位于不同内存地址的不同类。
但是您将使用接口而不是对象。我多年来一直在使用这种方法。它甚至允许我将VCL主应用程序与dll中的FMX表单混合使用。

尝试将应用程序拆分为包.Bpl文件


使用能够提供补丁的安装程序。正如@David所说,使用能够编写补丁的程序。或者,如果您真的想模块化您的单片程序,请使用软件包。你可能不会将每个表单都放在自己的包中,但如何划分则取决于你自己。试图将你的应用程序变成模块拼图会带来痛苦。不要这样做。如何向客户发送新的exe文件版本?是否可以打包该文件?@DavidHeffernan您能提出任何建议吗?也许一些反对者可以建议对此答案进行改进?我避免将项目拆分为包,因为这样会增加某些部分在升级时失去同步的可能性。我不再太担心可执行文件的大小了。@Rudy:如果我分发所有包以确保没有任何东西不同步,那么实际上我发送的字节数比发送单片可执行文件的字节数还要多。否则,不同的客户在他们的安装中有不同的二进制文件,我不能确定他们看到的任何问题都是无关的。在D7天里,它实际上又咬了我一口,这就是为什么我现在要避免它。@Bruce:没有什么是完全万无一失的。这是你和宇宙之间的斗争,宇宙总是能想出更大的傻瓜@BruceMcGee许多月前,我的同事和我使用包方法,以便在理论上不必更改主可执行文件的情况下分发附加功能。这是一个维护噩梦,在修补错误时必须构建不同版本的RTL软件包。为什么,哦,为什么你和这么多其他人都求助于DLL,并且不得不使用很多技巧来使用接口等,而不是使用软件包?包是用来模块化Delphi和C++Builder项目的,它们不需要任何技巧。您可以在包和程序之间以及包和包之间传递任何Delphi类型,这对于DLL是不正确的,因为您必须限制自己查看my,并且必须设置导入单元,等等。我不理解用DLL代替软件包的愿望。@Rudy Velthuis我同时使用软件包和DLL:有些DLL是用C写的,但你把表单放在DLL中。当然,只有在DLL是用其他语言编写的情况下,才能链接到DLL,但对于打包表单和要拆分单片程序时,情况并非如此。