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を呼び出しているだけです。
これで終了時のエラーは出なくなります。