2015-06-24 249 views
0

目前我將一個項目從Delphi XE移動到XE8。 我們使用一個組件,但最新的版本是用於XE3的,所以我將代碼改爲編譯。 現在我想安裝設計時間包,但是我收到rtl170.bpl丟失的錯誤。 沒有人僅將rtl170指向rtl庫。 我讀了一些關於運行時軟件包的內容,但在這個項目中,我沒有在項目選項中的軟件包下有這個菜單項。有什麼建議? 之前在這臺電腦上安裝了Delphi XE,但是我在安裝XE8之前先卸載了它。安裝Delphi包丟失rtl170.bpl錯誤

+0

rtl170是rtl的XE3版本。很明顯,你指的是某個地方。如何一個不錯的簡單MCVE? –

+0

我試着看看整個項目(它是我們得到源代碼的第三方),但是我無法找到像rtl170 – Sebastian

+0

那樣的東西,所以要做一些調試。去掉東西直到錯誤消失。那麼你拿出的最後一件事情應該會引導你解決問題。 –

回答

1

爲XE3所以採取的代碼,並改變它,直到它編譯

通常部件由兩個BPL文件,運行時封裝和設計時包(使用運行時的一個)。組件庫(如Raize,JediVCL,DevExpress等)由數十個BPL對組成。

需要一些工具來檢查DLL依賴關係(例如:CFF Explorer或Microsoft的Dependency Walker或WLX的FileInfo),並檢查您的組件BPLs - 你要確定它們中的哪一個組件的BPL是需要rtl170.bpl DLL

這可能是一個有用的想法,要麼登錄BPL加載像SysInternals進程監視器或只是掃描您的所有磁盤的BPL名稱。這可能是你有這樣的事情:

  1. 新建設計時BPL嘗試安裝(沒有鏈接到rtl170)
  2. 新建運行BPL(也沒有鏈接到rtl170)
  3. 舊運行時BPL,由XE3構建並引用rtl170。如果它存在,那麼(1)BPL可能找到並加載(3)而不是(2),所以無論您將重新編譯多少個(2),它都不起作用。

這只是一種可能的混淆場景,但肯定會發生。 確保xe3製造的BPL沒有舊的遺蹟。

有時只是發現和刪除雜散舊的BPL修復問題(例如 - 修復了XE2的upd4:-D)。

對於其餘的我們認爲你發現不是老流氓BPLs,你發現新的XE8編譯BPL仍然引用rtl170。

然後,如果您擁有組件的完整源代碼 - 刪除(或暫時移除)其所有DCP/DCU文件並強制編譯所有程序包的源代碼可能會有幫助。再次,您可以使用SysInternals Process Monitor等工具快照Delphi編譯包的文件訪問日誌。有時候,它顯示德里忽視DPK/PAS源文件,並使用舊的DCU/DCP進行編譯。實際上,XE8與XE3的DCU/DCP兼容的可能性很低,但這仍然是研究您的情況的途徑之一。

現在我們假設你沒有任何dcu/dcp/bpl文件顯示你的硬盤可以訪問到Delphi。假設您製作了編譯組件的唯一方法 - 從源代碼完成100%。

閱讀:http://docwiki.embarcadero.com/RADStudio/en/Compiler_directives_for_libraries_or_shared_objects_%28Delphi%29

機會是 - 這些設置是無論是在.DPK文件(或任何其他帕斯卡源)您有故障包,或在.DPROJ呸你錯誤的包(當時他們都可以訪問在IDE項目選項對話框中或通過任何XML編輯器)。或者在DPROJ和PAS/DPK文件中,有時。

你要找到這些設置和解決這些問題來回M170到xe8 BPLs

0

的實際後綴我有同樣的問題,我花了一段時間來找到解決方案。我目前的Delphi版本是XE6,但是當我試圖安裝特定的BPL時,它一直想要使用rtl170。 BPL編譯好,但不會安裝。機器上曾經有XE3的副本,但是我已經卸載了它。

原來我在C:\ Windows \ sysWOw64中有一個相同的運行時BPL的舊副本。一旦我刪除了sysWOw64中的副本,XE6就不再抱怨了。