Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检查是否启用了DWM/Aero,并将该代码保存在2000/XP/Vista/7的相同二进制文件中_C++_Aero_Dwm - Fatal编程技术网

C++ 检查是否启用了DWM/Aero,并将该代码保存在2000/XP/Vista/7的相同二进制文件中

C++ 检查是否启用了DWM/Aero,并将该代码保存在2000/XP/Vista/7的相同二进制文件中,c++,aero,dwm,C++,Aero,Dwm,我知道这个标题没有什么意义,主要是因为很难用一句话来解释。情况是这样的: 我有一个二进制程序,目标是Windows 2000及更新版本。现在,我继续添加了一些代码来检查用户是否在Vista/7下运行,如果是,那么检查Aero/DWM是否已启用。基于此,我将禁用一些与特定平台无关的东西,并启用一些其他功能。我的主要问题是,为了调用VisualC++ 2008中启用的DWMISCOMPATION,我必须添加DWMAPI.LIB文件并编译它。在Vista或7以外的任何版本中运行二进制文件都会出现“找不

我知道这个标题没有什么意义,主要是因为很难用一句话来解释。情况是这样的:

我有一个二进制程序,目标是Windows 2000及更新版本。现在,我继续添加了一些代码来检查用户是否在Vista/7下运行,如果是,那么检查Aero/DWM是否已启用。基于此,我将禁用一些与特定平台无关的东西,并启用一些其他功能。我的主要问题是,为了调用VisualC++ 2008中启用的DWMISCOMPATION,我必须添加DWMAPI.LIB文件并编译它。在Vista或7以外的任何版本中运行二进制文件都会出现“找不到组件。由于找不到dwmapi.dll,应用程序无法启动”错误。当然,由于DWM是新的,不适用于较旧的平台,因此预计会发生这种情况


那么,我的问题是:我是否有可能设法实现这一目标?一个二进制文件用于所有操作系统版本,并包含DWM检查代码?这个程序是在Visual C++ 2008中使用MFC编写的。VisualC++使用

< P>,我可以告诉链接器延迟加载DWMAPI。DLL。
我要感谢ewanm89,因为他说的话引起了我的共鸣,引导我找到了真正的答案。

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

虽然我自己从来没有这样做过,但在给定特定条件下,可以让windows遵从主二进制文件中嵌入的另一个二进制文件(最常用的是统一的32位/64位二进制文件,例如process explorer使用它从32位二进制文件以64位模式运行).Microsoft似乎将此技术称为并排程序集,并在MSDN上有文档记录,尽管我在其中找到的大多数文档似乎都特别提到使用它创建封装多个库版本的DLL。谢谢您的评论。你让我找到了正确的答案。是的,在我睡觉的时候,我想知道你是否可以在这个条件下加载dll,而不需要第二个二进制文件。。。