2

起初将 syslink 添加到我的对话框中,阻止它打开。我被要求在我的代码中添加以下行以显示带有“Syslink”控件的对话框。

#pragma comment(linker,"\"/manifestdependency:type='win32'\name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

当我将此行添加到我的 VS 项目时,它运行良好。这行代码意味着什么?

其次,当我在另一个项目的 .rc 文件和 resource.h 文件中为对话框和 syslink 控件添加相同的代码时,当我使用 make 文件编译它时,我遇到了同样的问题。但是这次我添加了#pragma 注释行。(仅供参考 - 如果我从 rc 文件中删除 syslink 控件,则对话框工作正常)。可能是什么问题呢 ?

4

3 回答 3

2

该 pragma 使 Microsoft 库链接到您的程序。要使用这些“通用控件 6”,您还需要在程序启动期间调用 InitCommonControlsEx。

于 2014-08-20T14:00:05.443 回答
1

@ScottMcP-MVP 感谢您的回复。

其实我解决了第二个问题。“/ALLOWISOLATION:NO”在我的生成文件中设置为链接器选项,它构建目标文件和二进制文件,就好像没有清单文件一样。因此,修改清单的“#pragma comment”指令在从 makefile 编译时无效。当我删除该链接器选项时,即使没有调用“InitCommonControls”,一切正常

根据我的理解,指定的“#pragma directive”在目标文件中添加了一个注释来链接公共控件库,并且它还在清单文件中添加了一个条目来链接公共控件库,前提是它的版本是6或更高版本。(因为 syslink 仅从版本 6 开始定义)

如果我错了,请纠正我。

于 2014-08-20T18:43:19.610 回答
1

这修复了 SYSLink 控件

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' "\    
"version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 

您注意到在对话框表单编辑器中添加一个 SYSLink 看起来不错,但是在运行您的实际应用程序时,它会加载一个完全空白的对话框,所有控件丢失等。有人说它根本不加载对话框。这就是修复它的唯一方法。

它失败是因为它需要 unicode 文本支持,默认情况下不加载它位于 Comctl32.dll 文件版本 6 中。

ComCtl32.dll 版本 6 中定义的所有新功能仅支持 Unicode。因此,您不能创建 SysLink 控件的 ANSI 版本,只能创建 Unicode 版本。

于 2016-01-09T02:39:54.963 回答