使用一个DLL库在运行时导入其他库

时间:2010-04-16 05:23:16

标签: c++ dll dllimport winapi

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

我知道这不是最好的方法,所以欢迎另一种方法的建议。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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