FAQ
エラー:“The instruction at "0xxxxxxx" referenced could not be read”

ナレッジ番号:1553 | 登録日:2023/05/29 | 更新日:2024/11/21

【エラー・メッセージ】

Visual Studio .NETで開発したArcGIS EngineおよびArcGIS Desktopアプリケーションはアプリケーション終了時にクラッシュする場合があります。その際に以下のメッセージが表示されます。

"The instruction at "0xxxxxx" referenced could not be read."

【原因】

このクラッシュは予想以上に長時間ロードされたCOMオブジェクトが原因です。

【解決策】

クラッシュを防ぐには、シャットダウンする前に全てのCOM参照をアンロードする必要があります。COM参照のアンロードを手助けするために、ESRI.ArcGIS.UtilityアセンブリにShutdown関数が用意されています。以下のコードはその関数の使用方法を示しています。


[Visual Basic .NET] 
  Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    ESRI.ArcGIS.Utility.COMSupport.AOUninitialize.Shutdown()
  End Sub

[C#] 
  private void Form1_Closing(object sender, CancelEventArgs e)
  {
    ESRI.ArcGIS.Utility.COMSupport.AOUninitialize.Shutdown();
  }



AOUninitialize.Shutdown関数はスタンドアロンアプリケーションで起こるほとんどのシャットダウンの問題を解消しますが、さらに明示的な解放を要求されるCOMオブジェクトが原因でまだ問題が発生する可能性があります。その場合は、System.Runtime.InteropServices.Marshal.ReleaseComObject()を使用して参照カウントを減らし、アプリケーションが正しく終了できるようにします。

StyleGalleryはそのようなオブジェクトの1つで、以下のコードはこのクラスの参照を解放する方法を示します。
[Visual Basic .NET] Dim styleGallery As IStyleGallery styleGallery = New StyleGalleryClass MessageBox.Show(styleGallery.ClassCount) Marshal.ReleaseComObject(styleGallery) [C#] IStyleGallery sg = new StyleGalleryClass() as IStyleGallery; MessageBox.Show(sg.ClassCount.ToString()); Marshal.ReleaseComObject(sg);

メタデータ

種類

製品