C# Windows窗体-VbPowerPack v1 FileViewer引发意外异常

C# Windows窗体-VbPowerPack v1 FileViewer引发意外异常,c#,.net,winforms,vb-power-pack,C#,.net,Winforms,Vb Power Pack,我需要维护旧的旧Windows窗体应用程序。我只是得到了源代码,没有文档或其他东西。 我正在使用Visual Studio 2015构建应用程序,该应用程序运行在64位Windows 8.1上,并使用.NET Framework 4.5。除了一件事之外,一切正常,名为FileViewer的VbPowerPack(版本1.0.1644.16184,完全过时)控件用于显示文件夹的内容,它只是在第一次将窗格设置为可见时不断抛出异常 System.OverflowException: Arithmeti

我需要维护旧的旧Windows窗体应用程序。我只是得到了源代码,没有文档或其他东西。 我正在使用Visual Studio 2015构建应用程序,该应用程序运行在64位Windows 8.1上,并使用.NET Framework 4.5。除了一件事之外,一切正常,名为FileViewer的VbPowerPack(版本1.0.1644.16184,完全过时)控件用于显示文件夹的内容,它只是在第一次将窗格设置为可见时不断抛出异常

System.OverflowException: Arithmetic operation resulted in an overflow.
   at System.IntPtr.ToInt32()
   at VbPowerPack.ShellFolder.GetTypeDescriptionForFile(String in_path) in C:\Documents and Settings\Ken\My Documents\Visual Studio Projects\VbPowerPack Source\VbPowerPack\ShellFolder.vb:line 264
   at VbPowerPack.FileViewer.populateControl() in C:\Documents and Settings\Ken\My Documents\Visual Studio Projects\VbPowerPack Source\VbPowerPack\FileViewer.vb:line 992
   at VbPowerPack.FileViewer.CreateHandle() in C:\Documents and Settings\Ken\My Documents\Visual Studio Projects\VbPowerPack Source\VbPowerPack\FileViewer.vb:line 866
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
   at System.Windows.Forms.TabPage.set_Visible(Boolean value)
   at System.Windows.Forms.TabControl.UpdateTabSelection(Boolean updateFocus)
   at System.Windows.Forms.TabControl.OnSelectedIndexChanged(EventArgs e)
   at System.Windows.Forms.TabControl.WmSelChange()
   at System.Windows.Forms.TabControl.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
(请注意,异常中没有提到我是Ken,DLL必须是在他的计算机上编译的,如果我使用internet上找到的同一DLL的另一个实例,我会得到相同的异常,只是没有Ken部分)

之后,如果在“未处理的异常窗口”中单击“继续”,我单击另一个选项卡,然后再次尝试此选项卡,则会显示控件,不会再次引发异常,但没有文件夹内容

我尝试将同一控件添加到该解决方案中新创建的空Windows窗体项目中的新窗体中,其行为与此相同。但是,当我用一个新的Windows窗体项目创建一个新的空解决方案,并且只使用FileViewer控件时,它工作得很好。当我在设计视图中打开表单(不运行应用程序)时,它会显示文件夹内容。 我尝试过调试,但异常在触发任何事件(如“VisibleChanged”)之前抛出。我还试着注释出任何其他可能影响这一点的代码,但没有运气。下面是控件的初始化方式

public partial class DocumentsForm
{
    private VbPowerPack.FileViewer fileViewer;
    ...

    private void InitializeComponent()
    {
        this.fileViewer = new VbPowerPack.FileViewer();
        ...
        this.fileViewer.AllowDrop = true;
        this.fileViewer.ContextMenu = this.contextMenuFiles;
        this.fileViewer.Dock = System.Windows.Forms.DockStyle.Fill;
        this.fileViewer.HideSelection = false;
        this.fileViewer.Location = new System.Drawing.Point(0, 34);
        this.fileViewer.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
        this.fileViewer.Name = "fileViewer";
        this.fileViewer.Path = "c:\\";
        this.fileViewer.Size = new System.Drawing.Size(842, 482);
        this.fileViewer.Sorting = System.Windows.Forms.SortOrder.Ascending;
        this.fileViewer.TabIndex = 0;
        this.fileViewer.UseCompatibleStateImageBehavior = false;
        this.fileViewer.ItemClicked += new VbPowerPack.FileViewer.ItemClickedEventHandler(this.fileViewer_ItemClicked);
        this.fileViewer.ItemDoubleClicked += new VbPowerPack.FileViewer.ItemDoubleClickedEventHandler(this.fileViewer_ItemDoubleClicked);
        this.fileViewer.LocationChanged += new System.EventHandler(this.fileViewer_LocationChanged);
        this.fileViewer.VisibleChanged += new System.EventHandler(this.fileViewer_VisibleChanged);
        this.fileViewer.DragDrop += new System.Windows.Forms.DragEventHandler(this.fileViewer_DragDrop);
        this.fileViewer.DragEnter += new System.Windows.Forms.DragEventHandler(this.fileViewer_DragEnter);
        ...
        this.Controls.Add(this.fileViewer);
        ...
    }
}

挣扎了几天。欢迎提供任何帮助和建议。

找到了!问题是VBPowerpackV1控件需要在32位应用程序中使用,是的,它们太旧了。我的计算机是64位的,VisualStudio默认将平台目标设置为“任意CPU”,在我的例子中这意味着64位。对它在新添加的项目中如何工作的解释是,这些Win Forms项目是在平台目标设置为“任意CPU”的情况下构建的,但默认情况下勾选了“首选32位”


为什么我以前没有尝试以x86的方式运行它?好。。。以32位运行它还带来了一些其他问题,但在解决这些问题后,FileViewer控件可以正常工作。感谢@LarsTech和@GuidoG的帮助。

找到了!问题是VBPowerpackV1控件需要在32位应用程序中使用,是的,它们太旧了。我的计算机是64位的,VisualStudio默认将平台目标设置为“任意CPU”,在我的例子中这意味着64位。对它在新添加的项目中如何工作的解释是,这些Win Forms项目是在平台目标设置为“任意CPU”的情况下构建的,但默认情况下勾选了“首选32位”


为什么我以前没有尝试以x86的方式运行它?好。。。以32位运行它还带来了一些其他问题,但在解决这些问题后,FileViewer控件可以正常工作。感谢@LarsTech和@GuidoG的帮助。

您在这些活动中做了什么?具体来说,LocationChanged和VisibleChanged。在这些事件中没有执行任何代码,我在那里添加了伪代码,只是试图在那里停止调试器。确实包含代码的事件是ItemClicked、ItemDoubleClicked、DragDrop和DragEnter,当控件显示时,这些事件都不会触发,对吗?您可以注释掉所有事件中的所有代码,以确定驱动器是否太大?尝试设置一个不同的位置,因为在您的构造中,您已经为'c:`path'设置了位置。@GuidoG我现在将尝试,但请记住,即使我在解决方案中新添加的项目中没有任何事件或任何内容地使用该控件,它也会引发相同的异常。它只在一个不同的解决方案中起作用。在这些事件中,你在做什么?具体来说,LocationChanged和VisibleChanged。在这些事件中没有执行任何代码,我在那里添加了伪代码,只是试图在那里停止调试器。确实包含代码的事件是ItemClicked、ItemDoubleClicked、DragDrop和DragEnter,当控件显示时,这些事件都不会触发,对吗?您可以注释掉所有事件中的所有代码,以确定驱动器是否太大?尝试设置一个不同的位置,因为在您的构造中,您已经为'c:`path'设置了位置。@GuidoG我现在将尝试,但请记住,即使我在解决方案中新添加的项目中没有任何事件或任何内容地使用该控件,它也会引发相同的异常。它只在不同的解决方案中起作用。