VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 アルゴリズム(基本)関係のメニュー
1.エラー処理実行時の基本的な設定
2.エラー処理について
3.API関数使用時のエラー情報を取得
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.


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 関数 エラー情報 エラーコード エラー番号



このページのトップへ移動します。