2013-02-28 106 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