1

根据问题,我正在尝试修改 Indy10 (IdHTTPProxyServer.pas) 的源代码。但未能重新编译 indy10 项目...我的 IDE 是 XE2,以下是我所做的步骤..

  1. 在 Menu->Component->Install Packages 中删除包“Indy 10 Core Design Time”和“Indy 10 Protocols Design Time”

  2. 打开 IndyProtocols.dpk

  3. 在 IdHTTPProxyServer.pas 中进行更改

  4. 编译

然后有时会显示错误“rtl160.bpl 中的访问冲突”,有时会显示错误“xxxxxx 处 coreide160.bpl 中的异常 xxx(任何组件)”

由于我对开发环境并不熟悉,我完全不明白出了什么问题......任何帮助将不胜感激。

谢谢


感谢所有回复。您的所有建议让我更加了解开发环境。最后我接受@Marcus Adams 的回答,因为项目中有不止一个开发人员。最好不要更改 IDE 的源文件。

4

4 回答 4

3

通常,当我更改源代码时,我会将修改后的源文件保存到我的项目文件夹中。这样,只有那个单元被重新编译。

如果您更改了特定的 .pas 文件,只需将其保存到您的项目文件夹并重新编译。保持原始 Delphi(和 Indy)源文件不变。

这也使将来更容易更新,因为您的更改不会在更新后丢失,并且您的更改不会影响其他项目。

于 2012-07-23T14:20:38.543 回答
1

有几个 VCL 设计时包(与 DataSnap 相关)链接到 Indy 的捆绑版本。如果你要更新你的 indy,你需要做以下事情:

  1. 找到那些包(我不记得它们,但我会回复你),然后从已安装的包列表中删除它们。
  2. 从已安装的软件包列表中删除捆绑的 Indy 软件包。
  3. 重命名捆绑的 Indy dcu 目录,这样 IDE 就不会混淆要使用的 Indy dcu 实例。
  4. 重命名捆绑的 Indy bpl 文件,这样 IDE 就不会加载错误的文件。

只有这样你才能编译你的新版本的 Indy。

于 2012-07-23T13:54:24.847 回答
1

您提到的两个错误都不是编译器错误。它们不太可能是由编译器本身引起的。它们可能来自导致编译的调用链中的其他地方。

一个短期的解决方案是从命令行编译。MSBuild 是 Delphi 在后台使用的构建引擎。

  1. 像往常一样编辑 IDE 中的任何 Indy 文件,保存更改然后关闭 IDE。
  2. 从开始菜单打开Rad Studio 命令提示符。这将确保设置正确的环境变量以运行命令行构建。您也可以使用标准命令提示符并运行 rsvars.bat 来完成同样的事情。
  3. 用于cd将目录更改为 IndyProtocols.dpk 的位置
  4. 类型msbuild IndyProtocols.dpk /target:Build /p:config=Release

如果你想做一个调试版本,只需更改/p:config=Release/p:config=Debug. 请注意,使用 msbuild 时区分大小写很重要,因为项目文件是 xml,区分大小写。

此外,为了它的价值,您应该尽量避免直接对 IDE 附带的库进行更改。如果您在提供的库中发现需要为特定项目修复的错误,您通常可以通过将有问题的文件复制到项目的文件夹中并在那里对其进行更改来解决。您可能还需要复制其他几个依赖文件。如果您采用这种方法,编译器将通知您需要复制哪些依赖项并出现错误,例如Unit * was compiled with a different version of *.*


现在,如果您真的想调试 IDE,您可以尝试,但是整个 IDE 中使用的rtlcoreide包都被编译为发布版本(没有调试信息),因此可能很难确定导致您看到的错误的原因。

无论如何,您可以在项目管理器中加载 IndyProtocols.dpk 运行 IDE 的第二个实例。然后使用Run > Attach to Processfrom 第一个 IDE 实例将调试器附加到第二个 IDE 实例。之后,只需尝试从第二个 IDE 实例构建 IndyProtocols.dpk。如果一切按预期进行,调试器将捕获错误并让您在错误发生的地方中断,以便您可以挖掘。

于 2012-07-23T14:25:48.880 回答
1

您可以跳过组件/包编译步骤,只需在运行时创建 Indy 组件。

将 Indy Lib Core/Protocols/System 路径添加到项目搜索路径中,您就完成了。

于 2012-07-23T16:23:07.190 回答