gpt4 book ai didi

c# - 在 C# 中使用 TaskDialog 时出现 EntryPointNotFoundException

转载 作者:太空狗 更新时间:2023-10-29 18:24:10 26 4
gpt4 key购买 nike

我正在使用以下代码来调用 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/

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