- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用以下代码来调用 TaskDialog。
[DllImport("ComCtl32", CharSet = CharSet.Unicode, PreserveSig = false)]
internal static extern void TaskDialogIndirect(
[In] ref TASKDIALOGCONFIG pTaskConfig,
[Out] out int pnButton,
[Out] out int pnRadioButton,
[Out] out bool pfVerificationFlagChecked);
但是,我收到异常“无法在 DLL 'ComCtl32' 中找到名为 'TaskDialogIndirect' 的入口点。”
我拿了this code .我使用的是 Windows 7 x64 (RC)。
我做错了什么?
最佳答案
除了这是一个 vista 功能之外别无其他
更新:这个问题与并排程序集有关:这些功能仅存在于 comctl32.dll 版本 6 中,但是,出于兼容性原因,Vista 将加载早期版本,除非您另有说明。大多数人(包括我)一直采用的方法是使用 list 。这已被证明是棘手的,并且可能不是正确的解决方案,尤其是如果您正在编写的是一个库:您不一定要强制整个应用程序使用公共(public)控件 6。
正确的解决方案是推送 new activation调用其中一个仅限 Vista 的 API 时的上下文。激活上下文将使用正确版本的 comctl32.dll,同时保留应用程序的其余部分,并且不需要 list 。
幸运的是,这很容易做到。一些完整的代码已经存在MS Knowledgebase .文章 (KB 830033) 中的代码按原样执行此操作。
替代托管 API:可以在此处找到 Vista 的 TaskDialog 和 TaskDialogIndirect 的完整包装器:
http://code.msdn.microsoft.com/WindowsAPICodePack
对于 WPF 使用以下内容:
从 http://code.msdn.microsoft.com/VistaBridge 下载“VistaBridge 示例库”下载后,打开项目然后构建它(如果要查看所有代码,请检查\Library 或\Interop 文件夹中的文件)。您现在可以从 VistaBridge\bin\debug\获取 DLL 并在您的项目中添加对它的引用,同时您必须为每个不同的 VistaBridge 模块添加一个 using 语句。例如:
使用 Microsoft.SDK.Samples.VistaBridge.Interop 或 .Library 或 .Properties 或 .Services - 取决于您的需要。
VistaBridge 项目包括用于许多其他 Vista 功能(例如 TaskDialog、Vista OpenFile 和 SaveFile 对话框,当然还有 Aero Glass Effects)的 API,以运行 VistaBridge 项目来尝试这些功能。
关于c# - 在 C# 中使用 TaskDialog 时出现 EntryPointNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612351/
编辑: 我已经修复了代码包的源并上传了更新的 NuGet 包: https://www.nuget.org/packages/WindowsAPICodePack-Shell/ 感谢 dmex 修复错
我在 win32 应用程序中使用 TaskDialog API。我创建了一个带有是/否按钮的任务对话框,但我找不到任何选项来将“否”按钮设置为默认值。 YES 按钮始终是默认按钮。如果有办法将“否”按
在我维护的软件中,我计划用 TaskDialog 替换旧的 MessageBox,正如很久以前微软 UI 指南所建议的那样。 我需要解决的主要问题如下: 可以通过按 Esc 键关闭通过 Message
在我维护的软件中,我计划用 TaskDialog 替换旧的 MessageBox,正如很久以前微软 UI 指南所建议的那样。 我需要解决的主要问题如下: 可以通过按 Esc 键关闭通过 Message
我们最近更新了一个内部工具,以使用供应商的在线工具代替我们以前的自制功能。此更新中的一项任务是在用户单击用于执行操作的按钮时将他们重定向到网站。 我想直接在消息框上嵌入一个超链接,因为输入 URL 是
我的 TaskDialog 中的图标丢失了: 在任务栏中: 我的代码是这样的: using Microsoft.WindowsAPICodePack; using Microsoft.WindowsA
有没有办法让 TaskDialog 始终位于顶部(即系统模式)? 我已经检查了 TaskDialogConfig 结构( http://msdn.microsoft.com/en-us/library
我正在开发一个现代 WPF 应用程序。我想使用 TaskDialog,但我总是收到常见错误: TaskDialog feature needs to load version 6 of comctl3
我正在 Delphi 2007 上开发一个 Windows 应用程序,并且在其中使用“Ttaskdialog”组件。使用 Windows XP 它运行正常,但在 Windows 7 中我收到以下消息:
我们有一个较旧的 WPF 应用程序,它使用“Windows API 代码包”来显示任务对话框(在 Vista 中引入的东西,但在 Windows 8 中一直有效)。 我现在尝试在 Windows 10
我注意到我的任务对话框中有一个很大的垂直空间(命令链接的标题和说明文本之间的空间),看起来非常糟糕。它在我将 WindowsAPICodePack 升级到 1.1 版后立即开始出现。 代码如下: Ta
我正在使用以下代码来调用 TaskDialog。 [DllImport("ComCtl32", CharSet = CharSet.Unicode, PreserveSig = false)]
我正在编写一个应用程序并想使用 TaskDialogIndirect函数 - 但是我不想写大量的 P/Invoke 东西等等,所以我已经包含了 WinAPICodePack。不过有一个问题!当我为 T
我是一名优秀的程序员,十分优秀!