は、だから私が働いているプログラムは、テキストファイルを選択し、ファイル選択ダイアログボックスを開き、「プロセスファイル」ボタンを、持っています。その後、ソフトウェアはC言語のDLL libにパイプして結果を返す関数を呼び出します。Vb.net「アサーション失敗」をキャッチしますか?
このファイルは、あなたが処理しようとしていることを移動または削除される場合を除き、すべてが、正常に動作します。 VBはstr =!という大きな "アサーション失敗"メッセージボックスをスローします。 NULL(私はそうだと思います)。私は "try、Catch"ステートメントでこの関数を持っています。
なぜそれがちょうどそれをキャッチされていませんか?
ファイルを処理する直前にファイルが存在するかどうかを確認することはできますが、ファイルを削除することは、大きなアサーションボックスが原因ではない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
あなたは私たちがあなたのしてください「してみてくださいキャッチ」文を表示することができますか? – Werdna
コードで編集しました。 –
は、「メッセージボックス 『アサーションに失敗しました』 VBは大きなをスローします」。それは、Cコードから来ていません、assert()関数はそれを表示します。例外ではないので、Try/Catchは絶対に何もしません。すべての引数が適切な値を持っていることを知らない限り、関数を呼び出さないでください。 Fwiw、そのLMSdll.dllファイルで行うべきことは、ディスクから削除することです。 –