【问题标题】:difference between DLL wrapper and DLL [closed]DLL包装器和DLL之间的区别[关闭]
【发布时间】:2013-02-28 10:00:12
【问题描述】:

我不知道什么是 DLL 包装器。有人可以解释一下吗
1) 什么是 DLL 包装器?
2) 它与 DLL 有何不同?
3) 怎么用?

感谢和问候,

【问题讨论】:

  • 查看codeproject.com/Articles/224869/… 了解有关使用 dll 包装器的信息
  • 我会从this 开始,边走边记。
  • @WhozCraig,我在 goggle 上搜索过,但我不明白 dll 包装器的作用是什么?

标签: c++ windows dll


【解决方案1】:

当程序使用 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 窗口中渲染茶壶。

    【讨论】:

    • +1 另一个 dll 或静态库。 DLL 包装器最强大的用途之一是将静态库作为单个模块主库,该静态库期望成为进程地址空间中自身的唯一副本,但被多个 DLL 使用,也可能被根 EXE 使用。将其埋在单个 DLL 中并将您需要的部分暴露给其他模块可确保这种情况发生。
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2010-10-15
    • 2011-05-23
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2011-01-16
    • 2011-07-06
    相关资源
    最近更新 更多