1

我知道这个标题没什么意义,主要是因为很难用一行来解释。所以情况如下:

我有一个针对 Windows 2000 和更新版本的二进制程序。现在,我继续添加一些代码来检查用户是否在 Vista/7 下运行,如果是,则检查是否启用了 Aero/DWM。基于此,我将禁用一些与该特定平台无关的东西,并启用一些其他功能。我的主要问题是,为了从 Visual C++ 2008 调用 DwmIsCompositionEnabled,我必须添加 dwmapi.lib 文件并针对它进行编译。在非 Vista 或 7 中运行二进制文件会出现“无法定位组件。应用程序无法启动,因为未找到 dwmapi.dll”错误。当然,这会发生,因为 DWM 是新的并且不适用于旧平台。

那么我的问题是:我有可能以某种方式设法实现这一目标吗?所有操作系统版本的一个二进制文件并包含该 DWM 检查代码?该程序是在 Visual Studio 2008、Visual C++ 下使用 MFC 编写的。

4

2 回答 2

2

原来我可以告诉链接器延迟加载 dwmapi.dll。

我要感谢 ewanm89,因为他所说的话引起了共鸣,并引导我找到了真正的答案。

于 2009-08-23T00:25:06.267 回答
1

正常的解决方案是使用 LoadLibrary() 和 GetProcAddress()。两者都可以在您的程序启动后完成。但是对于 DelayLoad 解决方案仍然是 +1,它在幕后对您也是如此。

于 2009-08-24T08:11:48.390 回答