3.API関数使用時のエラー情報を取得 |
1.API関数使用時のエラー情報を取得 2. 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:追加なし 使用 API:FormatMessage / ShellExecute その他 :このサンプルは、Win32 API を使用しておりますので、ある程度 Win32 API が理解できる方がお使い下さい。 : |
1.API関数使用時のエラー情報を取得 |
Option Explicit 'メッセージ文字列を指定の書式で取得する(741) Private Declare Function FormatMessage Lib "kernel32" _ Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, _ ByVal dwMessageId As Long, ByVal dwLanguageId As Long, _ ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long 'システムメッセージリソースを検索する(741) Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub Command1_Click() Dim lngRet As Long lngRet = ShellExecute(0, "open", "XXXXXX", vbNullString, "c:\", 1) End Sub 通常、API 関数を使用時エラーが発生していても重大なエラーでない場合は止まらないのでエラーが発生していなか調べる必要があります。 Private Sub Command1_Click() Dim lngRet As Long lngRet = ShellExecute(0, "open", "XXXXXX", vbNullString, "c:\", 1) If lngRet < 32 Then MsgBox "エラーコード : " & Err.LastDllError End If End Sub 上記のように、戻り値を調べ、Err.LastDllError プロパティを使って上記のようにすれば、発生したエラーの番号は解りますが、内容までは解りません。 Private Sub sGetErrMsg() '最後にDLLを呼び出したときのエラーを取得(GetLastError) Dim lngResult As Long Dim ErrorCode As Long Dim ErrBuffer As String 'エラーメッセージを受け取るバッファーを確保 ErrBuffer = String$(256, vbNullChar) '最後にDLLを呼び出したときのエラーコードを取得 ErrorCode = Err.LastDllError 'エラーコードからエラーメッセージを取得する lngResult = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, ErrorCode, 0&, ErrBuffer, Len(ErrBuffer), 0&) 'バッファーからメッセージを取り出し ErrBuffer = Left$(ErrBuffer, InStr(ErrBuffer, vbNullChar) - 1) 'エラーコードとエラーメッセージを表示 MsgBox "エラーコード: " & ErrorCode & vbLf & ErrBuffer, vbInformation, "GetLastError" End Sub Private Sub Command1_Click() Dim lngRet As Long lngRet = ShellExecute(0, "open", "XXXXXX", vbNullString, "c:\", 1) If lngRet < 32 Then Call sGetErrMsg End If End Sub そこで、FormatMessage 関数を併用して使用する事でエラー番号とエラー内容を表示させる事ができます。 尚、Win32 API関数のGetLastError を VB6.0 から使用してもうまく取得できない場合があるとかで、VB6.0 からなら Err.LastDllError プロパティを使って取得した方がいいと言った書き込みが多く見受けられますので、Err.LastDllError プロパティを使って操作しております。(GetLastError API も試して見て下さい。) |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
API 関数使用時にエラー情報を取得するには Err.LastDllError GetLastError Win32 API 関数 エラー情報 エラーコード エラー番号 |