0

c#、VS2005、および.NET2.0を使用します。(XP 32ビット)これは、Interopライブラリを介してVBAアドイン(.xla)によって呼び出されるWinformsアプリです。このアプリはしばらく前から存在しており、アセンブリをコンパイルして開発マシン以外の場所で実行すると正常に動作します。開発では、(デバッガーでオブジェクトを実行しているだけで)「EXCEL.EXEの0xで未処理の例外: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);
        {...}

    }

ある種の環境問題のようです。レジストリが混乱しましたか?コードのバグである可能性がありますが、他の場所では正常に機能します。

4

3 に答える 3

2

過去に Office 2003 でこのシナリオの問題が発生しました。助けになったいくつかのこと:

  • Office 2003 Service Pack 2 をインストールすると、Excel を閉じるときに発生する一部のクラッシュが停止しました。

  • Office 2003 Service Pack 3 をインストールすると、VSTO2005 アプリケーションで XP スタイルを使用する際のバグが修正されます (ここでは当てはまりません)。

  • Excel VBA CodeCleaner http://www.appspro.com/Utilities/CodeCleaner.htmを定期的に実行すると、ランダムなクラッシュを防ぐことができます。

  • 複数のスレッドから Excel オブジェクトにアクセスするのは危険なので、そうしないでください。

可能性がある場合は、Microsoft PSS でケースを開くこともできます。問題を再現できれば、かなり良いです。そして、ほとんどの場合、この種のことはバグであるため、課金されることはありません:)

于 2008-09-19T17:26:30.643 に答える
0

あなたの開発マシンはWin64ですか?ビルドプラットフォームをx86に設定すると、アプリのwin64ビルドで問題が発生しました。

于 2008-09-19T16:38:35.920 に答える
0

開発マシンは他のマシンとは異なるバージョンのOfficeを実行していますか?私はPIAが異なることを知っています。したがって、たとえば、Office2003で開発してOffice2007でテストしている場合(またはその逆の場合)、問題が発生します。

于 2008-09-22T13:41:08.443 に答える