2012-07-23 49 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路徑添加到項目搜索路徑中,就完成了。