我正在編寫一個可編寫腳本的遊戲引擎,爲此我有大量執行各種任務的類。引擎的大小正在迅速增長,所以我想將大型可執行文件分解爲dll模塊,以便只包含遊戲編寫器實際使用的組件。當用戶編譯他們的遊戲(也就是他們的腳本)時,我希望正確的dll是最終可執行文件的一部分。我已經有相當多的覆蓋數據,所以我想我可能能夠將dll存儲爲此塊的一部分。我的問題歸結爲:LoadLibrary從文件中的偏移量
是否有可能欺騙LoadLibrary來啓動讀取該文件在一定的偏差?這將使我不必將DLL提取到不乾淨的臨時文件中,或者將dll的自動包含完全廢除,並簡單地指示我的用戶將dll與遊戲一起打包。
起初,我想過要去進場的「從內存中加載DLL」,但拒絕了便攜性的理由,只是因爲它看起來像這樣可怕的黑客。
有什麼想法?
親切的問候,
菲利普Bennefall
你似乎正在描述靜態鏈接的一個非常複雜的重塑。這就是靜態鏈接的全部內容 - 包括可執行文件中庫代碼的必要部分。 – 2011-05-29 16:00:27
那麼,這幾乎是我想要做的,但它必須基於腳本內容來完成。因此,我不能預編譯它,因爲這會導致我回到目前的位置。當用戶「編譯」他們的遊戲時,這不是一個真正的C++編譯;它僅僅是編譯它自己的高級字節碼的腳本引擎。然後將該字節碼加密並附加到引擎可執行文件的副本中,該引擎可執行文件的副本將檢查其開始執行時是否附加有適當的覆蓋數據。 – 2011-05-29 16:11:10
聽起來就像您需要一個工具來確定引擎的哪些部分處於未使用狀態,然後重新鏈接引擎可執行文件,可以使用實際的鏈接器或自己的工具來重新處理文件。 – 2011-05-29 16:34:47