我正在编写一个应用程序,并希望使用TaskDialogIndirect函数 – 但是我不想写大量的P / Invoke等等,所以我已经包含了WinAPICodePack.但是有一个问题!当我为TaskDialog创建一个控件并将其添加到对话框时,一切正常.但是,运行Show方法会导致mscorlib中出现OverflowException.我将其跟踪到一些指针处理和编组.
尝试使用代码得到了结果,我发现,必须为.NET 3.5和包含应用程序TOO编译DLL.在.NET 4.0上安装我的应用程序会调用此错误…有关解决方法的任何想法 – 或者您甚至可以重现此错误?
另一个问题是我可以将Icon属性设置为我想要的,但图标根本不显示.我必须设置一个动态设置图标的Opened事件……
信息:在Windows 8 Pro x64 RTM上运行Visual Studio 2012 RTM.应用程序是标准的WPF应用程序.
示例代码:
TaskDialog td = new TaskDialog(); td.Cancelable = true; td.Caption = "Caption"; td.InstructionText = "Instructions"; td.Text = "Text"; TaskDialogCommandLink buttonElevation = new TaskDialogCommandLink("elevation","Elevation required Sample"); buttonElevation.UseElevationIcon = true; td.Controls.Add(buttonElevation); td.Show(); // OverflowException occurs here!
我修复了这个基本上是32位/ 64位错误的问题.在NativeTaskDialog.cs文件中,有一行是关键的,它在函数中
IntPtr AllocateAndMarshalButtons( TaskDialogNativeMethods.TaskDialogButton[] structs)
您需要找到以下行
currentPtr = (IntPtr)((int)currentPtr + Marshal.SizeOf(button));
并替换它
currentPtr = (IntPtr)(currentPtr.ToInt64() + Marshal.SizeOf(button));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。