第一次添加系统链接到我的对话框,阻止它打开。我被要求在我的代码中添加以下行来显示一个带有"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文件中删除系统链接控制,对话框工作正常)。
这个pragma导致一个Microsoft库被链接到你的程序中。要使用这些"公共控件6",你还需要在程序启动时调用InitCommonControlsEx。
@ScottMcP-MVP谢谢你的回复。
实际上我解决了第二个问题。"/ALLOWISOLATION:没有"设置为一个链接器选项makefile,构建对象文件和二进制文件如果没有清单文件。因此,"# pragma comment"指令修改了manifest,当从makefile编译时没有效果。当我删除了链接器选项,一切工作正常,即使没有调用"InitCommonControls"
根据我的理解,指定的"# pragma指令"在对象文件中添加注释以链接公共控件库,并且仅当它的版本为6或以上时,它还在manifest文件中添加条目以链接公共控件库。(因为syslink是从版本6开始定义的)
如果我说错了请纠正我
这修复了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。因此,不能创建ANSI版本的SysLink
也不要忘记检查你是否有标志/MANIFEST:YES,否则它将无法工作