【问题标题】:Use one single DLL library to import other libraries at runtime在运行时使用一个 DLL 库导入其他库
【发布时间】:2010-04-16 05:23:16
【问题描述】:

我正在编写一个可以重新分发的 Win32 DLL 库。我正在使用不同版本的 Windows API,因为我想支持 Windows 7 功能,但仍然支持 Windows 2000(禁用某些功能)。我目前拥有的是 MyLib2000.dll、MyLibXP.dll 和 MyLibVista.dll,我的应用程序选择在运行时加载哪个库。我想要一种方法来拥有一个单独的 DLL (MyLib.dll),它本身存储其他三个,当它被加载时,它会从自身中提取正确的 DLL 并加载它。

我知道这不是最好的方法,因此欢迎提出其他方法的建议。

【问题讨论】:

    标签: c++ dll dllimport winapi


    【解决方案1】:

    使用延迟加载并实现 dliNotePreLoadLibrary 通知挂钩以加载正确版本的 DLL。然后,链接器提供的延迟加载逻辑将从您加载的任何 DLL 中拉入所有函数。

    http://msdn.microsoft.com/en-us/library/z9h1h6ty(v=VS.100).aspx

    或者在调用任何可能无法加载的函数之前使用延迟加载并实现你的函数来检查操作系统版本(因为它在旧操作系统上不存在)。

    【讨论】:

    • 这看起来像是我的问题的解决方案。我会研究一下,但如果我能看到一些示例代码,我将不胜感激。
    • 这可能是您正在寻找的样本类型:codeproject.com/KB/DLL/delayloaddll.aspx
    【解决方案2】:

    为什么不直接在软件层中抽象出操作系统版本的依赖关系,用STLSoftdl_call() function template suite 之类的方式实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 2018-02-03
      • 2020-07-21
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      相关资源
      最近更新 更多