【问题标题】:How do I modify Indy 8 IdMessage.pas with Delphi 6?如何使用 Delphi 6 修改 Indy 8 IdMessage.pas?
【发布时间】:2012-11-25 08:40:39
【问题描述】:

我有一份 Delphi 6 副本和一个使用 Indy TIdMessage 组件的简单电子邮件程序。我想删除 IdMessage.pas 的第 464-465 行,然后重新编译应用程序。我很难找到清晰的文档,所以我尝试了以下步骤来修改组件:

  • 在 IDE 中打开 \delphi6\source\indy\indy.dpk
  • 在包窗口中双击IdMessage.pas
  • 编辑IdMessage.pas并保存文件
  • 在“包”窗口中单击“编译”
  • 单击“项目”菜单中的“Build Indy”
  • 在“包”窗口中单击“安装”

然后我收到一个错误,\bpl\indy60.bpl can't be loaded because \bin\indy60.bpl is already loaded。所以我在“组件”菜单中尝试了“安装包...”,但只在那里找到了\bpl\dclindy60.bpl。所以我删除了那个包,然后:

  • 在 IDE 中打开 \delphi6\source\indy\dclindy.dpk
  • 在“包”窗口中单击“编译”
  • 单击“项目”菜单中的“构建 dclIndy”
  • 在“包”窗口中单击“安装”

IDE 确认所有组件(包括 TIdMessage)都已安装,但电子邮件程序仍在运行,就好像仍在使用未修改的原始组件一样。

我做错了什么?

【问题讨论】:

  • Delphi 6 附带 Indy 8,而不是 6。没有 Indy 6。在 8 之前,Indy 被称为 WinShoes。

标签: delphi ide indy indy-8


【解决方案1】:

如果您使用的是运行时包,那么您需要确保您的程序找到了新的包文件 .bpl。

但您可能没有使用运行时包。因此运行时程序使用位于 Delphi 安装文件夹中的 .dcu 文件静态链接 Indy 代码。特别是在这种情况下<ProgramFiles>\Borland\Delphi6\Lib\IdMessage.dcu。您需要确保链接新代码。最简单的方法是将修改后的文件添加到您的项目中。这意味着修改后的版本会被编译并链接到您的程序中。

由于您的修改位于单元的实施部分,这就是您需要做的所有事情。如果修改位于接口部分,您将遇到“Unit X 是用不同版本的 Unit Y 编译的”错误。您可以通过将其余的 Indy 源代码添加到您的项目来解决这个问题。

有一点要强调的是,你永远不应该修改 Delphi 安装文件夹下的文件。如果您想对这些组件进行修改,请复制文件并在这些副本中进行修改。

【讨论】:

  • 正确,没有运行时 pkgs。单独链接修改后的副本可能很容易,但是我需要注意两个版本的源:原始安装的错误版本 + 我卸载的固定版本。库源不是为了允许错误修复+重新安装更正的组件吗?那些编译/安装按钮预计只能用于 4 个新组件?我的步骤的某些变体不能替换库吗?我的步骤实际上发生了什么变化+为什么他们失败了?我会试试你的解决方案,但是库创建者在开发这些包时实际上会做什么来更新文件?
  • “库创建者在开发这些包时实际上做了什么来更新文件?”。他们从 repo 中检查源代码,构建它,修改它,然后提交更改。就像处理代码一样。
  • 至于有两个版本的源,这正是你想要的。如果修改Delphi安装目录下的副本,需要重新安装Delphi时会怎样?你会失去你的修改。您将修改后的版本置于修订控制之下。你不是在使用版本控制吗?
  • @mike:我是 Indy 库开发人员之一。在开发 Indy 时,我完全删除了所有预安装的 Indy 文件,并重新配置 IDE 以指向我的开发文件。但这只是我的选择,不是要求。您可以用重新编译的文件替换预安装的文件,也可以保持原样(以备不时之需),然后重定向 IDE 和/或单个项目以使用您的单独副本。
  • @Remy Lebeau:你是说 lib 开发人员在安装假定正确的 lib 后在一个 .pas 中修复一个小错误,你只需替换 .pas/.dcu 文件(用1 .dcu 用于非调试 bin 文件夹,1 用于调试文件夹),以及最初创建的 .bpl/.dpk/etc 内容可以忽略并保持原样? lib 开发人员不能简单地编辑 \source\ 中的 .pas 文件并使用我尝试过的一些步骤组合来使 IDE 重建已安装的 lib?如果没有,Package窗口有编译/安装按钮,项目选项等很奇怪,但安装后不能使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多