Pure virtual function callってエラーがでるんですけど。。。

VisionPro 7.0あたりからGigE Visionカメラを使ったプログラムを書いていると、アプリケーション終了時に

こんなエラーが出ることがあります。

詳しい理由はいろいろあるようなのですが、アプリケーション終了時に気の早いGigE関連のオブジェクトが勝手に先に消えてしまっているのが原因のようです。

VisionPro 7.1でごく簡単なアプリでも発生してしまいました。
Visual Studioで、Windowsのフォームアプリケーションを新規に作って、画像取り込みコントロールをひとつ貼ります。

これをビルドして実行すると

このように普通に動きます。

で、このアプリを終了すると最初のエラーダイアログが出てきます。

解決方法は

フォームの Disposeをオーバーライドします。
以下は、何もコードを書き足していない状態です。

1:    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
2:        Try
3:            If disposing AndAlso components IsNot Nothing Then
4:                components.Dispose()
5:            End If
6:        Finally
7:            MyBase.Dispose(disposing)
8:        End Try
9:    End Sub

そこに、8〜11行目の3行を追加します。

1:    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
2:        Try
3:            If disposing AndAlso components IsNot Nothing Then
4:                components.Dispose()
5:            End If
6:
7:            ' pure virtual function callのエラーを回避する
8:            Dim frameGrabber As New Cognex.VisionPro.CogFrameGrabbers
9:            For Each fg As Cognex.VisionPro.ICogFrameGrabber In frameGrabber
10:               fg.Disconnect(False)
11:           Next
12:
13:       Finally
14:           MyBase.Dispose(disposing)
15:       End Try
16:   End Sub

やっていることは、存在するすべてのフレームグラバオブジェクトのDisconnectを呼び出しているだけです。

これで終了時のエラーは出なくなります。