2012-07-23 89 views
1

正在关注the question,我试图修改Indy10(IdHTTPProxyServer.pas)的源代码。但未能重新编译indy10项目...我的IDE是XE2,和下面是我做的步骤..未能在XE2上重新编译indy10的源代码

  1. 删除包“印10核心设计时间”和“印第安纳波利斯10协议设计时间” 在菜单 - >成分 - >安装软件包

  2. 打开IndyProtocols.dpk

  3. 请在IdHTTPProxyServer.pas变化

  4. 编译

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

由于我没有真正熟悉发展环境,我完全不明白什么是错误的...任何帮助将不胜感激。

感谢


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

+0

您是否尝试重新启动delphi或计算机?有时德尔福可能会感到困惑,并给你奇怪的错误。尽管XE @比2006年更稳定。 – 2012-07-23 13:04:50

+0

是的,我之前尝试过。但它没有奏效。 – Willy 2012-07-23 13:10:22

回答

3

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

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

由于您的更改在更新后不会丢失,并且您的更改不会影响其他项目,所以这还使得将来更新更加容易。

+0

+1良好的提示使用 – 2012-07-23 16:00:33

+0

,但你也不会得到在这个特定的单位更新的Indy版本的改进。在这种情况下,修订控制程序可以轻松应用修改(请参见Subversion文档中的[供应商分支](http://svnbook.red-bean.com/en/1.1/ch07s05.html)) – mjn 2012-07-23 16:26:01

+0

@mjn,正好我做的事。 – 2012-07-23 16:42:09

1

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

  1. 找到那些包(我不记得他们的头顶,但我会回到你那里),和从安装的软件包列表中删除它们。
  2. 从安装的软件包列表中删除捆绑的Indy软件包。
  3. 重命名捆绑的Indy dcu目录,因此IDE不会对Indy dcu的哪个实例使用感到困惑。
  4. 重命名捆绑的Indy bpl文件,因此IDE不会加载错误的文件。

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

1

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

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

  1. 像往常一样编辑IDE中的任何Indy文件,保存更改并关闭IDE。
  2. 从开始菜单打开Rad Studio命令提示符。这将确保将适当的环境变量设置为运行命令行构建。您也可以使用标准命令提示符并运行rsvars.bat来完成相同的操作。
  3. 使用cd,如果你想做一个调试版本只是改变/p:config=Release/p:config=Debug目录切换到IndyProtocols.dpk
  4. 类型msbuild IndyProtocols.dpk /target:Build /p:config=Release

的位置。请注意,使用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。如果一切按预期进行,调试器将捕获错误并让您在发生的位置中断,以便您可以四处挖掘。

+0

是的,你是对的。它们不是编译器错误。而且我也不会直接更改IDE的库。谢谢! – Willy 2012-07-24 02:35:12

1

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

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