我希望在應用程序中「提供」幾個函數/過程甚至是變量,而不用在我自己的代碼中使用它們。編譯器會自動忽略未使用的變量和函數,還是鏈接器?我該如何改變它?我已經試圖取消選中CodeGeneration ---> Optimization
,但沒有運氣。在Delphi中編譯/鏈接未使用的函數/過程
回答
如果程序中的某些內容引用該對象,則鏈接器無法將其刪除。所以,你可以趁這個是這樣的:
procedure StopLinkerRemoval(P: Pointer);
begin
end;
然後在你的初始化部分,你可以這樣寫:
StopLinkerRemoval(@MyVar);
StopLinkerRemoval(@MyFunction);
所有你需要做的是指代的對象。你不需要調用這個函數,或者讀取/寫入這個變量,只需要它的地址即可。
這將是最簡單的。非常感謝你。我會把StopLinkerRemoval過程放到我的庫中,並在需要時給它打電話:) –
@Ben只是爲了好奇,但是什麼時候會這樣呢? – NGLN
我需要它,所以其他應用程序可以在我的進程上調用CreateRemoteThread。 –
鏈接器是忽略未使用變量的鏈接器。但是,我不確定它是否和程序和功能一樣。你不能改變這個改變。
+1謝謝你的回答。現在我知道這是鏈接器設置,我可能需要更改。 –
不客氣! :) –
有「未使用」或不引用procedures
/functions
也private
和protected
methods
在你的應用程序,你應該建立一個包,並把dcu
文件導入到庫路徑編譯。
public
和published
methods
即使沒有在您的應用程序中被引用編譯。
+1這是一個非常棒的發現!很多代碼非常方便! –
但它比這更復雜。在實現部分中定義的對象只能被剝離。私人成員可能會被剝奪。只有在包裹之外可以使用的東西才需要保持活力。 –
- 1. 何時在angularjs中使用鏈接函數和編譯函數?
- 2. 在鏈接過程中未定義對函數的引用
- 3. 鏈接和編譯彙編函數
- 4. AngularJS:ng-repeat的編譯和鏈接函數
- 5. 如何將數據從編譯過程傳遞給angularjs中的鏈接函數?
- 6. 鏈接列表未編譯
- 7. 如果你可以在Angular中使用鏈接函數來編譯函數嗎?
- 8. 使用avr-gcc編譯器/鏈接器鏈接avrfix庫中函數的未定義引用
- 9. 在AngularJS的編譯功能中使用鏈接函數中的addClass與uisng addClass
- 10. 我可以使用x64編譯過程中使用函數CreateProcess調用x32編譯的過程嗎?
- 11. 鏈接器錯誤,使用g ++鏈接到由gcc編譯的庫,未定義的引用該函數
- 12. 參數編譯過程中未使用的:「-stdlib」
- 13. anglarjs指令鏈接函數不從編譯函數調用
- 14. 爲什麼不能在指令的鏈接函數中編譯?
- 15. 未編譯的Sass函數
- 16. 「在鏈接過程中出現錯誤」,用Ocaml編寫的Java編譯器
- 17. 如何使用gcc編譯和鏈接python3包裝函數
- 18. Delphi XE2 - 嵌套類函數不編譯
- 19. 當內聯函數的編譯過程
- 20. Java在編譯過程中如何處理鏈接?
- 21. 如何在Delphi IDE和編譯應用程序中使用TBBMM
- 22. 使用NDK編譯鏈接(未複製)的文件
- 23. 編譯器是否會優化未使用的鏈接文件?
- 24. 編譯和鏈接調用C++函數的C代碼
- 25. 在PostgreSQL過程中使用HTML鏈接
- 26. 鏈接錯誤編譯/構建Delphi XE7和XE10 Android應用程序(SQLITE3)
- 27. 虛擬函數是在編譯過程中確定的嗎?
- 28. 函數式編程使用鏈表
- 29. 「在過程調用中不能使用函數」編譯器錯誤
- 30. 如何使用備用GCC編譯器編譯/鏈接
不確定「提供」是什麼意思,但是在編譯的應用程序中不包括未使用的代碼和變量是每個編譯器都做(或應該)做的基本優化。 –
如何在不調用函數或讀取/寫入變量等的情況下實際執行該操作。 –
如果沒有引用,鏈接器將刪除代碼,但是如果它不是如何引用該代碼? –