【问题标题】:Failed to recompile the source code of indy10 on XE2在XE2上重新编译indy10源代码失败
【发布时间】:2012-07-23 12:56:06
【问题描述】:

按照the question,我正在尝试修改Indy10的源代码(IdHTTPProxyServer.pas)。但是无法重新编译indy10项目...我的IDE是XE2,以下是我做的步骤..

  1. 删除包“Indy 10 Core Design Time”和“Indy 10 Protocols Design Time” 在菜单->组件->安装包

  2. 打开 IndyProtocols.dpk

  3. 在 IdHTTPProxyServer.pas 中进行更改

  4. 编译

然后有时它会显示错误“rtl160.bpl 中的访问冲突”,有时它会显示错误“Exception xxx(any component) in coreide160.bpl at XXXXXX”

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

谢谢


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

【问题讨论】:

  • 你试过重启delphi或电脑吗?有时 Delphi 会感到困惑并给您带来奇怪的错误。虽然 XE@ 比 2006 稳定得多。
  • 是的,我以前试过。但它没有用。

标签: delphi indy indy10 c++builder-xe2


【解决方案1】:

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

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

这也让以后更容易更新,因为您的更改不会在更新后丢失,而且您的更改不会影响其他项目。

【讨论】:

  • 但您也不会在此特定单元中获得新 Indy 版本的改进。在这种情况下,修订控制程序可以轻松应用修改(请参阅 Subversion 文档中的vendor branches
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    短期解决方案是从命令行编译。 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 的第二个实例。然后使用第一个 IDE 实例中的Run > Attach to Process 将调试器附加到第二个 IDE 实例。之后,只需尝试从第二个 IDE 实例构建 IndyProtocols.dpk。如果一切按预期进行,调试器将捕获错误并让您在错误发生的地方中断,以便您可以挖掘。

    【讨论】:

    • 是的,你是对的。它们不是编译器错误。而且我也不会直接更改IDE的库。谢谢!
    【解决方案4】:

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

    将 Indy Lib Core/Protocols/System 路径添加到项目搜索路径中即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 2017-05-31
      • 2015-11-04
      • 2011-01-22
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      相关资源
      最近更新 更多