2008-12-04 92 views
6

是否可以在運行時以編程方式編輯可執行文件的資源?如果是這樣,怎麼樣?如果沒有,是否有另一個可以輕鬆用於修改資源的程序?C++在運行時修改資源

謝謝,德里克。

+0

您的意思是Windows資源?這是平臺特定的,是嗎? – 2008-12-04 00:50:41

回答

0

是的,這是可能的,但不是特別容易。它基本上需要編寫一個資源編譯器(至少對於要修改的資源類型)。

例如,我曾經編寫過一個菜單編譯器,它在運行時將輸入從數據庫中取出(然後將結果保存回數據庫)。如果源表不變,則使用現有資源,否則將重建。

在菜單資源(我相信對話框)的情況下,棘手的問題是某些成員只能根據標誌設置以及嚴格的對齊要求而存在。

在修改.exe中已經存在的資源的情況下,您需要將資源數據複製到內存緩衝區中(如果要添加新元素,可使用額外的空間)(使用FindResource,LockResource,內存副本然後UnlockResource)。

做出更改後,使用其中一個間接創建函數(即CreateMenuIndirect)並傳遞緩衝區的地址。

資源API允許將這樣的緩衝區寫回應用程序二進制文件,但如果使用代碼簽名會破壞簽名,所以要非常小心。我也不知道該API是否適用於實際運行的程序。