Violação Excel Addin Acesso
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.
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.