.NET Windows 7特定错误

ser*_*hio 3 .net visual-studio-2010 visual-studio .net-2.0 windows-7

我有一个.NET应用程序和它的设置.使用VS 2005构建.

开发机器是Windows XP SP3.

有人在Windows7下安装它.并得到以下错误

WinForm ThreadException

System.AccessViolationException:尝试读取或写入受保护的内存.这通常表明其他内存已损坏. System.Windows.Forms.UnsafeNativeMethods.IOleObject.DoVerb(的Int32 iVerb,IntPtr的LPMSG,的IOleClientSite pActiveSite,的Int32 LINDEX,IntPtr的hwndParent,COMRECT lprcPosRect) System.Windows.Forms.AxHost.DoVerb(动词的Int32) System.Windows. Forms.AxHost.InPlaceActivate()

另外一个

抛出了类型'System.Windows.Forms.AxHost + InvalidActiveXStateException'的异常.目前无法调用方法"Disconnect".

现在,想知道问题出在哪里,并在这台Windows7上安装了VS 2005.现在,该解决方案可以无异常地编译和运行.我构建了这个设置,并在这台Win7机器上重新安装了新构建的设置......

我有例外.为什么这个?

应用程序没有使用VS启动的异常,但在启动已安装的可执行文件后抛出它...

但是,我成功(没有例外)在OS> Win XP:Windows 7(x64)和Windows Server 2008(x64)的某些机器上测试了已安装的应用程序......

研究日志,我发现产生异常的代码:

Panel p = new Panel();
p.Margin = new Padding(0);
p.Dock = DockStyle.Fill;
p.Controls.Add(display); // 'display' is an ActiveX control instance

Logger.LogMessage("before");

this.tableLayoutPanel.Controls.Add(p); // protected memory EXCEPTION

Logger.LogMessage("after");
Run Code Online (Sandbox Code Playgroud)

所以,我看到" 之前 "然后 AccessViolationException: Attempted to read or write protected memory...看不到" 之后 "......

这种例外的常见原因是什么?

细节

  • 我在应用程序中使用了一些第三方ActiveX;
  • 使用该ActiveX的样本(用C++编写)在这台机器上运行良好.
  • 该解决方案针对x86平台;
  • 我设法在**Windows Server 2008(x64)和Windows 7(x64)上无错启动应用程序;
  • 尝试使用'Windows XP兼容性(SP2,SP3)'模式 - 相同的结果(例外).
  • 试图将应用程序安装在其他文件夹中ProgramFiles.我用C:\ TestFolder作为安装路径 - 结果是一样的:AccesViolationException ....

Ste*_*ger 5

哇,x84 CPU,从未见过其中之一;-))你的意思可能是x64 ......

您的Windows XP安装是64位吗?
它可能是32/64位转换问题,而不是Windows 7问题.

Forms.UnsafeNativeMethods.IOleObject
Run Code Online (Sandbox Code Playgroud)

你ping你的ActiveX DLL吗?

它是32位dll还是64位dll?32位dll不会在64位环境中运行,反之亦然.

如果你通过COM调用它,你可能有机会.但至少在Linux上,C/C++数据类型长在64位模式下有8个字节,而在32位模式下有4个字节.

尝试在.NET应用程序中定位x86平台(= 32位).