【问题标题】:Excel Addin Access ViolationExcel 加载项访问冲突
【发布时间】:2008-09-22 21:41:08
【问题描述】:

使用 c#、VS2005 和 .NET 2.0。 (XP 32 位)这是一个 Winforms 应用程序,由 VBA 插件 (.xla) 通过互操作库调用。这个应用程序已经存在了一段时间,并且在我的开发机器以外的任何地方编译和执行程序集时工作正常。在开发时,它会严重崩溃(在调试器中并只是运行对象),并出现“EXCEL.EXE 中 0x 处的未处理异常...:0x...违反读取位置 0x...

但这是奇怪的部分:

我界面中的第一个方法工作正常。所有其他方法都如上所述崩溃。这是代码的近似值:

[Guid("123Fooetc...")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IBar
    {
        [DispId(1)]
         void ThisOneWorksFine(Excel.Workbook ActiveWorkBook);

         [DispId(2)]
         string Crash1(Excel.Workbook ActiveWorkBook);

         [DispId(3)]
         int Crash2(Excel.Workbook activeWorkBook, Excel.Range target, string someStr);
     }

    [Guid("345Fooetc..")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("MyNameSpace.MyClass")]    
    public class MyClass : IBar
    {
        public void ThisOneWorksFine(Excel.Workbook ActiveWorkBook)
        {...}

         string Crash1(Excel.Workbook ActiveWorkBook);
        {...}

         int Crash2(Excel.Workbook activeWorkBook, Excel.Range target, string someStr);
        {...}

    }

这似乎是某种环境因素。注册表混乱?可能是代码错误,但在其他地方可以正常工作。

【问题讨论】:

    标签: c# interop .net-2.0 add-in


    【解决方案1】:

    过去,我在使用 Office 2003 的情况下遇到过问题。一些有帮助的事情:

    • 安装 Office 2003 Service Pack 2 可阻止关闭 Excel 时发生的一些崩溃。

    • 安装 Office 2003 Service Pack 3 修复了在 VSTO2005 应用程序中使用 XP 样式的错误(此处不是您的情况)

    • 定期运行 Excel VBA CodeCleaner http://www.appspro.com/Utilities/CodeCleaner.htm 有助于防止随机崩溃。

    • 从多个线程访问 Excel 对象会很狡猾,所以我希望您不要这样做。

    如果有可能,您也可以尝试使用 Microsoft PSS 开箱。如果您能够重现问题,它们非常好。而且在大多数情况下,这种事情是一个错误,所以你不会为此付费:)

    【讨论】:

      【解决方案2】:

      你的开发机器是Win64的吗?如果您将构建平台设置为 x86,我遇到了应用程序的 win64 构建问题。

      【讨论】:

        【解决方案3】:

        您的开发机器运行的 Office 版本是否与其他机器不同?我知道 PIA 不同。因此,例如,如果您在 Office 2003 上进行开发并在 Office 2007 上进行测试(反之亦然),就会遇到问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-04-04
          • 1970-01-01
          • 2013-09-12
          • 1970-01-01
          • 1970-01-01
          • 2017-05-06
          相关资源
          最近更新 更多