Нарушение доступа к надстройке Excel - PullRequest
0 голосов
/ 19 сентября 2008

Использование c #, VS2005 и .NET 2.0. (XP 32 бит) Это приложение Winforms, которое вызывается надстройкой VBA (.xla) через библиотеки Interop. Это приложение существует уже некоторое время и прекрасно работает, когда сборка компилируется и выполняется где-либо, кроме моей машины разработчика. В dev происходит сбой (в отладчике и только при запуске объекта) с «Необработанное исключение в 0x ... в EXCEL.EXE: 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);
        {...}

    }

Кажется, что-то вроде окружающей среды. Реестр разбит? Могут быть ошибки в коде, но он отлично работает в других местах.

Ответы [ 3 ]

2 голосов
/ 19 сентября 2008

У меня были проблемы в этом сценарии с Office 2003 в прошлом. Несколько вещей, которые помогли:

  • Установка пакета обновления 2 для Office 2003 остановила некоторые сбои, которые произошли при закрытии Excel.

  • Установка пакета обновления 3 (SP3) для Office 2003 устраняет ошибку, связанную с использованием стилей XP в приложении VSTO2005 (здесь не ваш случай)

  • Запуск Excel VBA CodeCleaner http://www.appspro.com/Utilities/CodeCleaner.htm периодически помогает предотвратить случайные сбои.

  • Доступ к объектам Excel из нескольких потоков был бы хитрым, поэтому я надеюсь, что вы этого не делаете.

Если у вас есть такая возможность, попробуйте открыть дело в Microsoft PSS. Они очень хороши, если вы можете воспроизвести проблему. И в большинстве случаев такие вещи являются ошибкой, поэтому вы не будете платить за это:)

0 голосов
/ 22 сентября 2008

На вашем компьютере разработчика установлена ​​версия Office, отличная от других машин? Я знаю, что PIA отличаются. Так, например, если вы разрабатываете на Office 2003 и тестируете на Office 2007 (или наоборот), у вас возникнут проблемы.

0 голосов
/ 19 сентября 2008

Ваш девайс Win64? У меня были проблемы со сборками приложений на win64, которые исчезают, если вы установите платформу сборки на x86.

...