0

使用 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);
        {...}

    }

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

4

3 回答 3

2

过去,我在使用 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 开箱。如果您能够重现问题,它们非常好。而且在大多数情况下,这种事情是一个错误,所以你不会为此付费:)

于 2008-09-19T17:26:30.643 回答
0

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

于 2008-09-19T16:38:35.920 回答
0

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

于 2008-09-22T13:41:08.443 回答