2016-11-07 89 views
1

編譯一些舊的代碼,我的應用程序將不再運行。新編譯的exe文件無法啓動,「因爲qtintf70.dll從您的計算機中丟失」。相同的代碼,缺少qtintf70.dll

奇怪的事情:從完全相同的代碼編譯的較舊的exe文件運行得很好。這兩個exe文件都在同一個系統上測試,但在不同的Delphi安裝(在VirtualBox上運行的Delphi 7)上編譯。

使用Google搜索,有人建議「你已經以某種方式拉入了Clx,Clx應用程序需要QT庫,在你的使用條件中查找以Q開頭的單位。但是又一次:這是完全相同的代碼。我查過並找不到任何東西。

對此提出建議?

+1

[Conditional compiler directives](http://docwiki.embarcadero.com/RADStudio/en/Conditional_compilation_(Delphi))(通常是[versions](http://docwiki.embarcadero.com/RADStudio/en/Compiler_Versions) )可能會帶來意想不到的代碼。 –

+0

就像我說的:完全相同的代碼。我還發現一些較舊的備份只是爲了檢查 - 同樣的問題。出於某種原因,編譯這個Delphi安裝將導致所描述的問題。 – Jarle

+2

錯誤的搜索路徑可能會引入不同的文件集。 –

回答

4

在D7中,引用qtintf70.dll的唯一源代碼單元是QForms.Pas和Qt.Pas。

所以,你需要做的是

  1. 移動到的地方不是在你的項目的搜索路徑這兩個文件及其相應.DCU文件的所有實例。使用像SwiftSearch這樣的工具來確保你能找到所有這些工具。

  2. 做一個完整的項目。

構建應該停止在某個地方,抱怨編譯器找不到這些單元中的一個或其他單元。當時正在編譯的源單元是包含對其中一個或另一個的引用的源單元。

+0

非常感謝!按照你的程序,我最終扔掉了一個我可以輕鬆管理的舊單元。我仍然困惑,爲什麼這不是一個問題,但現在我很高興我能解決它。謝謝! – Jarle

+0

@Jarle:之前沒有問題,因爲在PATH或可執行文件夾中有一處qtintf70.dll的副本。這是唯一可能的原因,即一個副本的可執行文件工作,而另一個已編譯的可執行文件的副本不會失敗,因爲無法找到DLL。如果問題出現在編譯過程中,並且錯誤是關於丟失的.pas或.dcu文件,這將是一個不同的問題,但這是關於找不到的DLL。 –

+0

謝謝大家。這是一個擁有數千用戶的舊共享軟件應用程序。從來不是一個問題,並且這個DLL當然不會與應用程序一起分發。搜索早期的exe文件,找不到對qtintf70.dll的引用,並且程序將在沒有DLL的系統上運行(我剛剛測試過)。造成問題的單位在其使用條款中有QDialogs。將其更改爲對話框,一切都很好。再次,我不知道爲什麼之前這不成問題。希望這可以幫助未來的其他人。 – Jarle