2016-04-01 29 views
0

は、だから私が働いているプログラムは、テキストファイルを選択し、ファイル選択ダイアログボックスを開き、「プロセスファイル」ボタンを、持っています。その後、ソフトウェアはC言語のDLL libにパイプして結果を返す関数を呼び出します。Vb.net「アサーション失敗」をキャッチしますか?

このファイルは、あなたが処理しようとしていることを移動または削除される場合を除き、すべてが、正常に動作します。 VBはstr =!という大きな "アサーション失敗"メッセージボックスをスローします。 NULL(私はそうだと思います)。私は "try、Catch"ステートメントでこの関数を持っています。

Assertion

なぜそれがちょうどそれをキャッチされていませんか?

ファイルを処理する直前にファイルが存在するかどうかを確認することはできますが、ファイルを削除することは、大きなアサーションボックスが原因ではないtry、catchの動作を確認するテストでした。

============================================== ============================

 Try 
      ProcessSongResult = ProcessSongInC(old_key(0), 
           new_key(0), 
           output_mode(0), 
           lyrics_mode(0), 
           display_format(0), 
           blank_line_mode(0), 
           song_file_path(0), 
           screen_width, 
           screen_height, 
           paper_width, 
           paper_height, 
           error_msg(0), 
           transposed_song(0), 
           num_columns, 
           column_1_end, 
           column_2_end, 
           font_size, 
           total_lines, 
           tsi(0), 
           ischord(0)) 

     Catch ex As Exception 
      MsgBox("Tranposing error encountered. Choose different settings and try again.", MsgBoxStyle.Critical, "Transposing Error Encountered!") 
      Exit Sub 

     End Try 

Public Declare Function ProcessSongInC Lib "LMSdll.dll" (
    ByRef old_key As Byte, 
    ByRef new_key As Byte, 
    ByRef output_mode As Byte, 
    ByRef lyrics_mode As Byte, 
    ByRef display_format As Byte, 
    ByRef blank_lines_mode As Byte, 
    ByRef song_file_path As Byte, 
    ByVal screen_width As Integer, 
    ByVal screen_height As Integer, 
    ByVal paper_width As Integer, 
    ByVal paper_height As Integer, 
    ByRef err_msg As Byte, 
    ByRef TransposedSong As Byte, 
    ByRef num_columns As Integer, 
    ByRef column_1_end As Integer, 
    ByRef column_2_end As Integer, 
    ByRef font_size As Integer, 
    ByRef total_lines As Integer, 
    ByRef tsi As Integer, 
    ByRef ischord As Byte 
    ) As Integer 
+0

あなたは私たちがあなたのしてください「してみてくださいキャッチ」文を表示することができますか? – Werdna

+0

コードで編集しました。 –

+0

は、「メッセージボックス 『アサーションに失敗しました』 VBは大きなをスローします」。それは、Cコードから来ていません、assert()関数はそれを表示します。例外ではないので、Try/Catchは絶対に何もしません。すべての引数が適切な値を持っていることを知らない限り、関数を呼び出さないでください。 Fwiw、そのLMSdll.dllファイルで行うべきことは、ディスクから削除することです。 –

答えて

0

あなたがDebug.Assertメソッドのドキュメントを読んでいますか?それが何をしているのかが全体のポイントです。デバッグ中に特定の状態に関する特定の情報を提供することになっています。要点は、アサーションテストの条件の影響を受ける何かをする前に、アサーションを配置することです。リリースビルドであなただけの次のコードからスローされた例外になるだろうしながら、デバッグ中に、あなたは、アサーションからのメッセージが表示されます。あなたが見ているのは、あなたが見るはずのものです。アサーションを回避するには、リリースビルドを実行します。

関連する問題