在 Visual C++ 2005 中,我们可以通过 #pragma 指令来生成你想要的清单信息,这项功能可以简化新版本通用控件的使用。
例如,下面的代码可以指示链接器,将通用控件的新版本(6.0.0.0)链接到应用程序中。
===========================================================
// do not use – see discussion below
#pragma comment(linker, \
“\”/manifestdependency:type=’Win32′ “\
“name=’Microsoft.Windows.Common-Controls’ “\
“version=’6.0.0.0′ “\
“processorArchitecture=’X86′ “\
“publicKeyToken=’6595b64144ccf1df’ “\
“language=’*’\””)
===========================================================
请注意,在上面的代码中,我们使用了硬编码的方式来指定处理器架构,我们指定了 x86 架构。
这意味着,如果你的目标平台是 x64 架构,则会生成错误的清单信息。
为了修正此问题,可以使用如下的代码:
===========================================================
#if defined(_M_IX86)
#define MANIFEST_PROCESSORARCHITECTURE “x86”
#elif defined(_M_AMD64)
#define MANIFEST_PROCESSORARCHITECTURE “amd64”
#elif defined(_M_IA64)
#define MANIFEST_PROCESSORARCHITECTURE “ia64”
#else
#error Unknown processor architecture.
#endif
#pragma comment(linker, \
“\”/manifestdependency:type=’Win32′ “\
“name=’Microsoft.Windows.Common-Controls’ “\
“version=’6.0.0.0′ “\
“processorArchitecture='” MANIFEST_PROCESSORARCHITECTURE “‘ “\
“publicKeyToken=’6595b64144ccf1df’ “\
“language=’*’\””)
===========================================================
更新:之前我没有意识到,我们可以在清单指令中直接使用 * 来代表任意架构,这就方便很多了,如下所示:
===========================================================
#pragma comment(linker, \
“\”/manifestdependency:type=’Win32′ “\
“name=’Microsoft.Windows.Common-Controls’ “\
“version=’6.0.0.0′ “\
“processorArchitecture=’*’ “\
“publicKeyToken=’6595b64144ccf1df’ “\
“language=’*’\””)
===========================================================
总结
我是一个 #pragma 的重度使用者,因为我倾向于在代码中(而不是在开发环境中)指定所有的设定。
这样,你的东西就不再依赖开发环境,而是依赖你自己的代码。是不是更加有安全感?
居安,思危。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Visual C++ 2005 will generate manifests for you》
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.