Вопрос

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

    }

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

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top