无法在XE2上重新编译indy10的源代码

时间:2012-07-23 12:56:07

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

关注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. 编译

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

    由于我对开发环境并不熟悉,所以我完全不明白有什么问题......我们将不胜感激。

    由于


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

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

有几个VCL设计时包(与DataSnap有关)链接到捆绑版本的Indy。如果您要更新indy,则需要执行以下操作:

  1. 找到这些包(我无法记住它们的顶部,但我会回复你),并从已安装的包列表中删除它们。
  2. 从已安装的软件包列表中删除捆绑的Indy软件包。
  3. 重命名捆绑的Indy dcu目录,这样IDE就不会对使用哪个Indy dcu实例感到困惑。
  4. 重命名捆绑的Indy bpl文件,因此IDE不会加载错误的文件。
  5. 只有这样才能编译新版本的Indy。

答案 2 :(得分:1)

您提到的错误都不是编译器错误。它不太可能是由编译器本身引起的。它们可能来自调用链中的其他位置,直到编译。

短期解决方案是从命令行进行编译。 MSBuild是Delphi在引擎盖下使用的构建引擎。

  1. 像往常一样编辑IDE中的任何Indy文件,保存更改,然后关闭IDE。
  2. 从开始菜单中打开 Rad Studio命令提示符。这将确保设置适当的环境变量以运行命令行构建。您也可以使用标准命令提示符并运行rsvars.bat来完成同样的事情。
  3. 使用cd将目录更改为IndyProtocols.dpk
  4. 的位置
  5. 输入msbuild IndyProtocols.dpk /target:Build /p:config=Release
  6. 如果您想要执行调试版本,只需将/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。如果一切按预期进行,调试器将捕获错误并让您在它们发生的位置中断,以便您可以四处搜寻。

答案 3 :(得分:1)

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

将Indy Lib核心/协议/系统路径添加到项目搜索路径,您就完成了。