2011-03-21 30 views
4

如果我在EXE中有一個資源,並且我想提取它,它非常簡單。例如:如何從BPL內提取資源?

stream := TResourceStream.Create(HInstance, ResourceName, RT_RCDATA); 

這是有效的,因爲全局變量HInstance是EXE句柄。 BPL中的代碼是否有類似的方式來獲取它所包含的包的句柄,以便我可以從中提取資源?

回答

7

HInstance實際上是在SysInit單元中,每個PE(包,exe,dll)都是唯一的。系統中,如果使用rtl包,大部分編譯器RTL和輔助函數都會在包中共享。

因此,您在上面顯示的代碼應該可以在一個包內正常工作。 MainInstance可能是你認爲是加載exe文件(甚至在某些情況下是DLL)的句柄。

+0

是的,SysInit.HInstance是執行代碼所在模塊的實例。 – 2011-03-21 07:39:57

+0

那麼,理論上這是非常好的,但它不工作。我在BPL中有一個單元,並且有這樣一行,並且引發了一個未找到的錯誤。我已經使用ResourceHacker以正確的名稱驗證資源是否存在。任何想法發生了什麼? – 2011-03-21 14:41:02

+0

剛剛進行了測試,並且BPL內部單元的「HInstance」值與託管BPL的EXE中的單元返回的值相同。 – 2011-03-21 15:29:13