0

CAD/CAEシステムへのプラグインを開発しています。C# .NET 4.0 で書いています。この CAD システムの .dll を使用していますが、システムのソース コードにアクセスできません。

初めてプラグインを実行すると、うまく機能します。プラグインが 2 回目に作業を行ったとき、システムは応答しません (「サーバーがビジーです。次へ」ダイアログボックス)。

次のコードが AccessViolationException をスローすることがわかりました (リスト 1)。

public class TestClass : IDisposable
{
    private Session theSession;
    private static readonly UI theUI = UI.GetUI();
    private BlockDialog theDialog;
    ...

    public TestClass()
    {
        theSession = Session.GetSession();
        theDialog = theUI.CreateDialog(theDlxFileName); // throws exception in this line!
        theDialog.AddApplyHandler(ApplyCb);
        theDialog.AddOkHandler(OkCb);
        theDialog.AddUpdateHandler(UpdateCb);
        theDialog.AddInitializeHandler(InitializeCb);
        theDialog.AddDialogShownHandler(DialogShownCb);
    }

    public DialogResponse Show()
    {
        theDialog.Show();

        ...
    }

    public void Dispose()
    {
        ...
        theDialog.Dispose();
        ...
    }

    public SomeOtherFunction(...)
    {
        ...
        theSession...
        ...
    }

    ...
}

デバッガー (VS 2010 sp1) は、リスト 1 の 2 行目で例外がスローされることを示しています。実際、最初の行 (theSession.ActiveSketch) で AccessViolationException がスローされます。

初めてプラグインを起動すると、theSession.ActiveSketch == null になりますが、2 回目には例外がスローされます... しかし、私は ActiveSketch を使用したことがありません!

次...コードの各行を段階的にデバッグすると、theSession.ActiveSketch == null! その結果、プラグインが機能します。

次に... 3 回目、4 回目、5 回目にプラグインを実行すると... - プラグインが機能し、theSession.ActiveSketch は常に null に等しくなります! 3 回目、4 回目、... 回、すべてのブレークポイントを無効にしました...

殺人者は誰ですか?問題はどこだ?

4

0 に答える 0