Pergunta

Usando c #, VS2005 e .NET 2.0. (XP 32 bits) Este é um aplicativo WinForms que é chamado por um suplemento VBA (.xla) através de bibliotecas Interop. Esta aplicação tem sido em torno de um tempo e funciona bem quando o conjunto é compilado e executado em qualquer lugar que não seja a minha máquina de dev. Em dev ele trava dura (no depurador e apenas correr o objeto) com "Excepção em 0 x ... em EXCEL.EXE: 0x ... violação localização lendo 0x ...

Mas aqui é a parte estranha:

O primeiro método na minha interface funciona bem. Todos os outros métodos de funcionar como acima. Aqui é uma aproximação do código:

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

    }

Parece que algum tipo de coisa ambiental. Registro chundered? Poderia ser erros de código, mas ele funciona bem em outro lugar.

Foi útil?

Solução

Eu tive problemas neste cenário com o Office 2003 no passado. Algumas coisas que ajudaram:

  • A instalação do Office 2003 Service Pack 2 impediu que alguns acidentes que aconteceram ao fechar Excel.

  • A instalação do Office 2003 Service Pack 3 corrige um bug com o uso de estilos de XP em um aplicativo VSTO2005 (não o seu caso aqui)

  • A execução do Excel VBA CodeCleaner http://www.appspro.com/Utilities /CodeCleaner.htm periodicamente ajuda a evitar falhas aleatórias.

  • Acessando Excel objetos de vários segmentos seria desonesto, então eu espero que você não está fazendo isso.

Se você tem a possibilidade de você também pode tentar abrir um caso com Microsoft PSS. Eles são muito bons se você é capaz de reproduzir o problema. E na maioria dos casos, esse tipo de coisa é um erro, então você não será cobrado por ele:)

Outras dicas

É a sua máquina dev Win64? Eu tive problemas com win64 constrói de aplicativos que vão embora se você definir a plataforma de compilação para x86.

É a sua máquina dev executando uma versão diferente do Office do que as outras máquinas? Eu sei que os PIAs diferem. Então, se você está desenvolvendo no Office 2003 e teste do Office 2007 (ou vice-versa), por exemplo, você vai correr em problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top