Viv*_*lin 8 c# pinvoke taskdialog windows-7
我正在使用以下代码来调用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);
Run Code Online (Sandbox Code Playgroud)
但是,我得到异常"无法在DLL'ComCtl32'中找到名为'TaskDialogIndirect'的入口点."
我拿了这个代码.我使用的是Windows 7 x64(RC).
我究竟做错了什么?
除此之外没有任何东西是vista功能
更新:此探针与并排程序集有关:这些函数仅存在于comctl32.dll版本6中,但出于兼容性原因,Vista将加载早期版本,除非您另有说明.大多数人(包括我)采取的方法是使用清单.这已被证明是棘手的,并且可能不是正确的解决方案,特别是如果您正在编写的是库:您不一定要强制整个应用程序使用通用控件6.
正确的解决方案是在调用其中一个仅限Vista的API时推送新的激活上下文.激活上下文将使用正确版本的comctl32.dll,同时保留应用程序的其余部分,并且不需要清单.
幸运的是,这很容易做到.一些已经存在的完整代码MS知识库.文章中的代码(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功能的API(例如TaskDialog,Vista OpenFile和SaveFile对话,当然还有Aero Glass Effects)来试用这些功能,运行VistaBridge项目.
| 归档时间: |
|
| 查看次数: |
3321 次 |
| 最近记录: |