gpt4 book ai didi

c++ - 如何在 Windows 应用程序中启用常用控件

转载 作者:可可西里 更新时间:2023-11-01 17:08:06 35 4
gpt4 key购买 nike

我正在尝试在应用程序中启用通用控件。我按照 this MSDN article 中给出的步骤进行操作,特别是 Using ComCtl32.dll Version 6 in an Application That Uses Only Standard Extensions 部分。但我无法让它工作。

我做的与文章唯一不同的是我在项目属性页|中添加了 list 信息。配置属性 |链接器 | list 文件 |额外的 list 依赖项。这是我在文本框中输入的内容:

"type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*' xmlns='http://schemas.microsoft.com/developer/msbuild/2003' ";%(AdditionalManifestDependencies)

当我检查生成的 list (MyApp.exe.intermediate.manifest) 时,它看起来是正确的。

我还在 Project Properties | 中添加了对 ComCtl32.lib 的链接依赖项 |配置属性 |链接器 |输入 |附加依赖项。我还在启动时调用 InitCommonControlsEx,初始化的 INITCOMMONCONTROLSEX 结构如下:

INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_STANDARD_CLASSES;

但是对 InitCommonControlsEx 的调用总是返回 FALSE(这意味着它失败了)。经过一些调查,我发现从 GetLastError 返回的错误代码是 ERROR_FILE_NOT_FOUND。可能是什么问题?

更新:我注意到可能与“找不到文件错误”相关的内容。当我从调试器运行应用程序时,输出窗口中的一行是:

'MyApp.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.6002.18305_none_88f3a38569c2c436\comctl32.dll', Cannot find or open the PDB file

但是,对于一些更标准的库,如 kernel32.lib、user32.lib 等,有一堆类似的行:

'MyApp.exe': Loaded 'C:\Windows\System32\ntdll.dll', Cannot find or open the PDB file

'MyApp.exe': Loaded 'C:\Windows\System32\kernel32.dll', Cannot find or open the PDB file

'MyApp.exe': Loaded 'C:\Windows\System32\msvcrt.dll', Cannot find or open the PDB file

'MyApp.exe': Loaded 'C:\Windows\System32\user32.dll', Cannot find or open the PDB file

这些行总是出现在任何应用程序中,并且不会造成任何问题。 ComCtl32.dll 会有所不同吗?

最佳答案

好的。我为此做了一些功课,自己也发现了一些新东西。我最终是如何让这个工作的几乎是你想要做的:

  1. 转到项目/属性/链接器/ list 文件/其他 list 依赖项
  2. 逐字输入以下文本(意思是所有单引号和双引号完全如下)。顺便说一句,这一切都在一行中。

    "type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"

  3. 保存您的设置并重建完整项目(如果不是解决方案)以强制重新生成 list 和 PCH。

在执行此操作之前,以下内容在我的加载列表中:

Loaded 'C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.17514_none_ec83dffa859149af\comctl32.dll'

在为公共(public)控件手动设置 list 版本后,加载列表现在包含此内容(并正确地对 InitCommonControlsEx() 回答 TRUE,这首先是所有这些的重点):

Loaded 'C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\comctl32.dll'

注意:您也可以使用源代码中的#pragma 执行此操作,最好是在您的 stdafx.h header 中,但我更喜欢这种方式。

希望对您有所帮助。

关于c++ - 如何在 Windows 应用程序中启用常用控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13977583/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com