2008-09-19 87 views
0

使用c#,VS2005和.NET 2.0。 (XP 32位)這是一個Winforms應用程序,可通過Interop庫通過VBA插件(.xla)調用。這個應用程序已經存在了一段時間,並且在彙編程序編譯並在我的開發機器以外的任何地方執行時工作正常。在開發它崩潰硬(在調試器,只是運行對象)與「未處理的異常在0x ...在EXCEL.EXE:0x ...違反讀取位置0x ...Excel Addin訪問衝突

但這裏是奇怪的部分:

在我的接口第一種方法能正常工作的所有其他方法崩潰如上下面是代碼的近似值:。

[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 Service Pack 2可以阻止在關閉Excel時發生的一些崩潰。

  • 安裝Office 2003 Service Pack 3中修復的錯誤使用XP風格的VSTO2005應用程序(而不是你這裏的情況)

  • 運行Excel的VBA CodeCleaner http://www.appspro.com/Utilities/CodeCleaner.htm定期有助於防止隨機崩潰。

  • 從多個線程訪問Excel對象將是狡猾的,所以我希望你沒有這樣做。

如果您有可能還可以嘗試使用Microsoft PSS打開案例。如果你能夠重現問題,它們相當不錯。在大多數情況下,這種事情是一個錯誤,所以你將不會被收費:)

+0

Thx Joe! Code Cleaner做了訣竅。 – 2008-09-29 21:02:43

0

是你的d ev機Win64?如果您將構建平臺設置爲x86,則win64構建的應用程序會消失,我遇到了問題。

0

你的開發機器是否運行與其他機器不同版本的Office?我知道PIA不同。因此,例如,如果您在Office 2003上進行開發並在Office 2007上進行測試(反之亦然),則會遇到問題。