Visual Basic6 リファレンス
|
VB6 エラーメッセージ(DLL)操作
API(DLL)エラー時のエラーコード(Err.LastDllError)から、エラーメッセージを取得する |
API API(DLL)呼び出しの際にエラーが発生した場合、Err.LastDllError にエラーコードが入ります。このエラーコードから、エラーメッセージを抽出する場合に、FormatMessageを使います。 ソースはVB6用で記述しています。VB.NET以降のバージョンは型宣言に注意してください (VB6:Long → VB.NET以降:Integer) (VB6:Integer → VB.NET以降:Short) |
お品書き |
● 標準モジュール | API定義 標準モジュール |
● サンプル プログラム | エラーコードからエラーメッセージを取得するサンプル プログラム |
● サンプル プログラム | WININET.DLLのエラーコードからエラーメッセージを取得するサンプルリスト |
● FormatMessage | エラーコードからエラーメッセージを取得 |
● API定義 標準モジュール ' Constants - FormatMessage.dwFlags Public Const FORMAT_MESSAGE_ALLOCATE_BUFFER As Long = &H100 Public Const FORMAT_MESSAGE_ARGUMENT_ARRAY As Long = &H2000 Public Const FORMAT_MESSAGE_FROM_HMODULE As Long = &H800 Public Const FORMAT_MESSAGE_FROM_STRING As Long = &H400 Public Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000 Public Const FORMAT_MESSAGE_IGNORE_INSERTS As Long = &H200 Public Const FORMAT_MESSAGE_MAX_WIDTH_MASK As Long = &HFF '=========================== ' メッセージの文字列を指定の書式で取得する '=========================== Public 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 Any) As Long ' Constants - LoadLibraryEx.dwFlags Public Const DONT_RESOLVE_DLL_REFERENCES As Long = &H1 Public Const LOAD_IGNORE_CODE_AUTHZ_LEVEL As Long = &H10 Public Const LOAD_LIBRARY_AS_DATAFILE As Long = &H2 Public Const LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE As Long = &H40 Public Const LOAD_LIBRARY_AS_IMAGE_RESOURCE As Long = &H20 Public Const LOAD_WITH_ALTERED_SEARCH_PATH As Long = &H8 Public Declare Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" _ (ByVal lpFileName As String, ByVal hFile As Long, ByVal dwFlags As Long) As Long Public Declare Function FreeLibrary Lib "kernel32" (ByVal hModule As Long) As Long Public Declare Function GetLastError Lib "kernel32.dll" () As Long |
● エラーコードからエラーメッセージを取得するサンプル プログラム '================================= ' エラーコードに対応するエラーメッセージを取得する ' dwMessageId : Err.LastDllErrorのエラーコード '================================= Public Function ErrMessage_GetLastError(dwMessageId As Long) As String Dim dwFlags As Long 'オプションフラグ Dim lpBuffer As String 'メッセージを格納するたのバッファ Dim result As Long '戻り値(文字列のバイト数) dwFlags = FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS Or FORMAT_MESSAGE_MAX_WIDTH_MASK lpBuffer = String(1024, vbNullChar) result = FormatMessage(dwFlags, 0&, dwMessageId, 0&, lpBuffer, Len(lpBuffer), 0&) If (result > 0) Then lpBuffer = Left(lpBuffer, InStr(lpBuffer, vbNullChar) - 1) Else lpBuffer = "" End If ErrMessage_GetLastError = lpBuffer & "(" & dwMessageId & ")" End Function |
● WININET.DLLのエラーコードからエラーメッセージを取得するサンプルリスト '=========================================== ' WININET.DLLからエラーコードに対応するエラーメッセージを取得する ' dwMessageId : Err.LastDllErrorのエラーコード '=========================================== Public Function ErrMessage_WinInet(dwMessageId As Long) As String Dim dwFlags As Long 'オプションフラグ Dim lpBuffer As String 'メッセージを格納するたのバッファ Dim hModule As Long 'DLLファイルのハンドル Dim result As Long '戻り値(文字列のバイト数) dwFlags = FORMAT_MESSAGE_IGNORE_INSERTS Or FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_MAX_WIDTH_MASK lpBuffer = String(1024, vbNullChar) hModule = LoadLibraryEx("WININET.DLL", 0&, LOAD_LIBRARY_AS_DATAFILE) If (hModule <> 0) Then dwFlags = dwFlags Or FORMAT_MESSAGE_FROM_HMODULE result = FormatMessage(dwFlags, ByVal hModule, dwMessageId, 0&, lpBuffer, Len(lpBuffer), 0&) If (hModule <> 0) Then FreeLibrary hModule If (result > 0) Then lpBuffer = Left(lpBuffer, InStr(lpBuffer, vbNullChar) - 1) Else lpBuffer = "" End If ErrMessage_WinInet = lpBuffer & "(" & dwMessageId & ")" End Function |
● FormatMessage
|