2008-09-19 3 views
0

C#, VS2005 및 .NET 2.0 사용. (XP 32 비트) Interop 라이브러리를 통해 VBA 추가 기능 (.xla)에 의해 호출되는 Winforms 앱입니다. 이 응용 프로그램은 잠시 동안 주위에 있었는데 어셈블리가 컴파일되고 내 dev 컴퓨터 이외의 다른 곳에서 실행될 때 잘 작동합니다. dev에 그것은 디버거에서 (단지 개체를 실행하는) "처리되지 않은 예외 0x ... EXCEL.EXE에서 ... 0x ... 위반 읽기 위치 0x ...Excel 추가 기능 액세스 위반

하지만 이상한 부분은 다음과 같습니다.

..

내 인터페이스의 첫 번째 방법은 여기에 모든 다른 방법으로 위의 충돌이 잘 작동 코드의 근사치입니다 :

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

    } 

그것은 환경 것은 어떤 종류의 것 같다 레지스트리 chundered 할 수있는 코드를.? 버그가 있지만 다른 곳에서도 잘 작동합니다.

답변

2

이전에는 Office 2003에서이 시나리오에 문제가있었습니다. 도움이 몇 가지 :

  • Office 2003을 설치는 서비스 팩 2 Excel을 닫을 때 일어난 몇 가지 충돌을 중단했다.

  • 는 Office 2003 서비스 팩 3을 설치하면 주기적으로 임의의 충돌을 방지하는 데 도움이 VSTO2005 응용 프로그램에서 엑셀 VBA CodeCleaner http://www.appspro.com/Utilities/CodeCleaner.htm 실행 (다른 여기 경우)

  • 을 XP 스타일을 사용하여 버그를 해결합니다.

  • 여러 스레드에서 Excel 개체에 액세스하는 것은 피곤할 것이므로 귀하가 그렇게하지 않기를 바랍니다.

가능성이있는 경우 Microsoft PSS로 사례를 열어 볼 수도 있습니다. 문제를 재현 할 수 있다면 꽤 좋습니다. 그리고 대부분의 경우 이러한 종류의 버그가 있으므로 비용이 청구되지 않습니다.

+0

Thx Joe! 코드 클리너가 트릭을했습니다. –

0

당신의 d ev 머신 Win64? 빌드 플랫폼을 x86으로 설정하면 사라지는 응용 프로그램의 win64 빌드에 문제가 있습니다.

0

dev 컴퓨터가 다른 컴퓨터와 다른 버전의 Office를 실행하고 있습니까? 나는 PIA가 다르다는 것을 알고있다. 예를 들어 Office 2003에서 개발하고 Office 2007에서 테스트하는 경우 (또는 그 반대로) 문제가 발생할 수 있습니다.