2013-02-28 128 views
4

我不知道什麼是DLL包裝。有人可以請我解釋一下
1)什麼是DLL包裝?
2)它與DLL有什麼不同?
3)如何使用它?DLL包裝和DLL之間的區別

感謝和問候,

+0

看看http://www.codeproject.com/Articles/224869/Yet-another-DLL-wrapper-for-dynamic-loading有關使用dll包裝的信息 – chrisw 2013-02-28 10:04:26

+0

我會從[this]開始, (http://bit.ly/XcBvzy),並隨我記錄。 – WhozCraig 2013-02-28 10:04:52

+0

@WhozCraig,我在搜索護目鏡,但我不明白什麼dll包裝? – samprat 2013-02-28 10:06:48

回答

9

當一個程序使用一個DLL,它是這樣的:

  • 應用負載foo.dll在foo.dll
  • 應用程序調用函數
  • foo.dll執行函數返回值的應用

隨着包裝DLL,會發生這種情況:

  • 應用負載foo.dll(不知道或關心的是foo.dll實際上是在包裝,和原來的DLL已更名爲foo_original.dll)
  • foo.dll負載foo_original.dll
  • 應用程序調用函數在foo.dll
  • foo.dll將呼叫轉送至foo_original.dll
  • foo_original.dll執行功能,並返回值
  • foo.dll返回值foo.dll到應用

釷爲DLL包裝提供了檢查/記錄應用程序對原始DLL進行的所有調用的機會,並且有機會修改在這兩者之間傳遞的數據。

2

DLL包裝調用另一個DLL來提供所需的功能。出於簡單性或兼容性原因,它可能會也可能不會提供其特殊的API。 This is a tutorial,它顯示瞭如何製作包裝器DLL。 在這個特定的教程中,來自DirectX 9的一些類被包裝並用於在Blitz3D窗口內渲染一個茶壺。

+0

+1另一個DLL *或靜態庫*。 DLL-wrapper最強大的用途之一是單個模塊駐留一個靜態庫,該庫在進程地址空間中應該是它自己的唯一拷貝,但是也被多個DLL使用,也許還有根EXE。將它埋在一個單獨的DLL中,並將你需要的部分暴露給其他模塊,以確保這可以發生。 – WhozCraig 2013-02-28 10:30:52